Python Glossary English

Python 3.6+typesпонятие

types.AsyncGeneratorType

генераторы и корутины

Тип асинхронного генератора — объекта, который возвращает async def с yield внутри. Перебирается только через async for.

Синтаксис

isinstance(obj, types.AsyncGeneratorType)

async def с yield — уже не корутина: await для него не работает, а обычный for падает с TypeError, потому что у объекта есть только __aiter__/__anext__. Перебирать его можно лишь внутри другой async-функции через async for или асинхронный генератор списка. Если перебор прерван break, генератор стоит закрыть (contextlib.aclosing), иначе его finally выполнится неизвестно когда.

Примеры

import asyncio
import types
async def ticks():
    for i in range(3):
        yield i
async def main():
    print(isinstance(ticks(), types.AsyncGeneratorType))
    print([i async for i in ticks()])
asyncio.run(main())
# → True / [0, 1, 2]
async def ticks():
    yield 1
try:
    for i in ticks():
        pass
except TypeError:
    print('TypeError')  # → TypeError

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности