Как стать автором
Обновить

Комментарии 6

Эм я может что то путаю, но открытие файла так же как и его чтение в питоне не является асинхронной операцией, т.е. все эти корутины будут выполнены последовательно а не конкурентно. Может стоило ради примера использовать код (и библиотеки типа aiohttp или httpx) который бы скачивал какие то данные по сети?

Здесь мы проверяем выбрасывание исключения при отсутствующем файле, для этого достаточно использовать синхронную операцию. Конечно же, в реальных условиях надо было бы использовать async with aiofiles.open, но это потребовало бы установки aiofiles (или aiohttp), а мы используем REPL в docker-образе (конечно же и тут можно было бы применить pip.main(['install', 'aiofiles']), но это бы несколько усложнило пример).

aiofiles - тут overkill, он всего лишь производит ввод-вывод из файлов через трэд пул. Достаточно использовать thread pool executor, встроенный в цикл событий.

Ни одно нативное API адекватно не поддерживает неблокирующий ввод-вывод из файлов, будь то epoll, poll, select, kqueue или IOCP.

> чтение в питоне не является асинхронной операцией

Да, асинхронные задачи в заголовке статьи, россыпь async в коде и совершенно синхронный код под капотом, python...

asyncio.TaskGroup это мощная фишка из структурного асинхронного программирования и я бы назвал это основным в новости, а отлов групп исключений (имхо) в основном дополняет этот механизм (хотя группы исключений и возникли раньше).

TaskGroup запилен лично Гвидо , на основе уже отлаженного кода и идей (trio, anyio), что дает надежду на мощный импульс нового стиля асинхронного программирования.

Достаточно только сказать, что Гвидо предлагает считать asyncio.gather неприоритетным способом запускать группы задач.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий