Python Glossary English

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Сообщить о неточности