Каков внутренний механизм работы ключевых слов async и await в Python? Что происходит на уровне генераторов?

async def создаёт native coroutine, а await приостанавливает её, пока ожидаемый объект не завершится. Механизм использует сохраняемое состояние исполнения, но native coroutine — не обычный генератор.

Короткий ответ

Что ответить на собеседовании

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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее