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