Комментарии 4
Конечно, можно использовать await asyncio.wait(tasks, return_when=FIRST_EXCEPTION), но надо не забывать корректно завершать открытые задачи.
Поэтому нужно просто один раз разработать одну обёртку-«детскую», в основе которой будет asyncio.wait, и использовать её везде где требуется. Более того, подобные обёртки уже делали до нас. Зачем для этого городить аж целый Trio — непонятно.
В общем, прочитав пост, я не понял, какой мне будет профит от Trio.
Иронично то, что автор, реализуя в библиотеке "новый и прорывной подход параллельных вычислений, качественно превосходящий реализацию, например, в Go", реализует в Python аналоги каналов и context.Context из Go.
Видимый плюс библиотеки — трейсбэки. Которые режутся стандартной библиотекой не без причины. Для получения трейсбека нужно держать в памяти стек, который корутиной (да больше никем) использоваться не будет.
Код из статьи, использующий стандартный asyncio, мне кажется понятнее и очевиднее кода, написанного с использованием Trio. Использование with вместо asyncio.wait совсем не понравилось. Но здесь дело вкуса.
Для завершения корутины библиотека может выбросить исключение внутри third-party library. Это совсем нехорошо.
В общем не совсем понятно зачем. Наверное, содержит электролиты.
Trio – асинхронное программирование для людей