Size: a a a

2021 September 03

VK

Vasily Kondratyev in Rust Async
В обработчике actix-web внезапно получил панику с сообщением "can call blocking only when running on the multi-threaded runtime".

OK, был блокирующий вызов.

Но получается, actix-web работает на однопоточном рантайме tokio? Это нормально? И возможно ли переконфигурировать на многопоточный рантайм?
источник

ph

pl 🦑 hk in Rust Async
Он запускает однопоточные рантаймы по числу ядер
источник

VK

Vasily Kondratyev in Rust Async
Ясно. Выглядит логично. Видимо, для моей задачи actix-web не подходит.
источник

ph

pl 🦑 hk in Rust Async
Какой задачи?
источник

VK

Vasily Kondratyev in Rust Async
Нужно вызвать из async-функции, которая является обработчиком запроса POST, блокирующую на некоторое время поток функцию, которая об async ничего не знает и проектировалась в расчёте именно на блокирующий вызов.

Пока обхожусь костылём, запуская std::thread::spawn из async.
источник

K

Kitsu in Rust Async
spawn blocking?
источник

VK

Vasily Kondratyev in Rust Async
Нет - выстрелил и забыл :)
источник

K

Kitsu in Rust Async
Он точно также может детачиться
источник

ph

pl 🦑 hk in Rust Async
источник

VK

Vasily Kondratyev in Rust Async
Спасибо, интересное решение, испытаю
источник

KR

Kai Ren in Rust Async
Имхо, это оверкилл немного в этой ситуации будет. spawn_blocking правильно посоветовали выше.
источник

VK

Vasily Kondratyev in Rust Async
Ха, а я не понял сразу. Да, наверное.
источник
2021 September 06

BV

Boris Vinogradov in Rust Async
источник
2021 September 07

СД

Стас Донцов... in Rust Async
Я правильно понял что async/await в раст это не про асинхронный io на подобие asyncio в путоне?
источник

D

Denis in Rust Async
это не только про асинхронный i/o, но в основном про него
источник

СД

Стас Донцов... in Rust Async
Ну т.е. там схожее поведение? io операции и cpu операции делят какую-то одну лупу событий. io задачи блокируются по причине получения данных с транспорта но при этом не блокируют остальные задачи (остальные io и cpu) в лупе. А вот cpu задачи по сути могут заблочить всю лупу намертво, например рекурсия с числами фибоначи, т.к. все таски выполняются в одном потоке.

Оно?
источник

П

Пух in Rust Async
да
источник

П

Пух in Rust Async
Вообще длинные по времени участки без await не переключают контекст
источник

V

Vetro in Rust Async
нет

обычно рантайм дефолтный - мультитредовый и блочить "лупу" не будет
источник

V

Vetro in Rust Async
в расте вообще нет ивент лупа
источник