Python 3.5+Асинхронное программированиепонятие
async for / async with
итерация
async for итерирует по асинхронному итератору. async with использует асинхронный контекстный менеджер.
Синтаксис
async for item in aiter: ...
async with ctx_manager() as obj: ...
Это не ускорители, а способ дождаться того, что приходит порциями: async for всё равно идёт по одному элементу за раз, просто между шагами отдаёт управление event loop. Обе формы работают только внутри async def и только с объектами, у которых есть __aiter__/__anext__ (или __aenter__/__aexit__) — обычный список или синхронный with-объект дадут TypeError. Если нужна именно параллельность, а не последовательное ожидание, собирайте корутины и отдавайте их gather или TaskGroup.
Примеры
import asyncio
async def agen():
for i in range(3):
await asyncio.sleep(0)
yield i
async def main():
async for val in agen():
print(val) # → 0 / 1 / 2
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности