Выполнить синхронную выборку http-клиента в потоке actix - PullRequest
1 голос
/ 07 марта 2020

У меня есть конечная точка actix, и мне нужно выполнить синхронную выборку http-клиента, чтобы получить некоторые результаты и вернуть некоторые данные. Мои конечные точки не могут использовать async, поэтому я не могу использовать методы .await.

Я пытался использовать клиент блокирования запросов в моей конечной точке следующим образом:

{ ...

  let res = reqwest::blocking::get(&fetch_url)?
    .json::<MyResp>()?;
  ...

Но это дает мне ошибку:

thread 'main' panicked at 'Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.', /.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.9/src/runtime/enter.rs:19:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Вы не можете использовать блокирование функций внутри async функций.

Вместо reqwest::blocking::get() использовать reqwest::get().await.

0 голосов
/ 07 марта 2020

Я не мог понять, как заставить его работать с reqwest (у него должны быть странные конфликты с actix), но по какой-то причине он работал нормально с chttp.

chttp::get(&fetch_url)?.text()?;

...