Асинхронный генератор создаётся функцией async def с yield и выдаёт значения через async for. Он реализует aiter и anext; получение следующего элемента возвращает awaitable.
Как устроена концепция асинхронных генераторов и какой протокол они используют под капотом?
Асинхронный генератор создаётся функцией async def с yield и выдаёт значения через async for. Он реализует __aiter__ и __anext__; получение следующего элемента возвращает awaitable.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Асинхронный генератор создаётся функцией async def с yield и выдаёт значения через async for. Он реализует aiter и anext; получение следующего элемента возвращает awaitable.
Внутри такого генератора можно ждать сеть через await, затем отдавать очередное значение через yield, не загружая весь поток в память. Конец обхода обозначается StopAsyncIteration. Дополнительно доступны asend(), athrow() и aclose() для управления выполнением и завершением. Выход из async for раньше времени сам по себе не гарантирует немедленную очистку ресурса: жизненный цикл нужно закрывать явно, например через aclosing.
Источник: peps.python.org.