async def создаёт native coroutine, а await приостанавливает её, пока ожидаемый объект не завершится. Механизм использует сохраняемое состояние исполнения, но native coroutine — не обычный генератор.
Каков внутренний механизм работы ключевых слов async и await в Python? Что происходит на уровне генераторов?
async def создаёт native coroutine, а await приостанавливает её, пока ожидаемый объект не завершится. Механизм использует сохраняемое состояние исполнения, но native coroutine — не обычный генератор.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
async def создаёт native coroutine, а await приостанавливает её, пока ожидаемый объект не завершится. Механизм использует сохраняемое состояние исполнения, но native coroutine — не обычный генератор.
Awaitable предоставляет протокол await, возвращающий итератор; через эту цепочку ожидание передаётся управляющей Task. Event loop возобновляет выполнение после готовности результата или исключения. Исторически coroutine строили на генераторах и yield from, но современный синтаксис выделяет их в отдельный тип. await уже завершённого объекта может не отдавать управление другим задачам; сам async не создаёт поток.
Источник: peps.python.org.