Как под капотом работает asyncio в Python? В чем разница между ключевыми словами await, async def, созданием задачи через asyncio.create_task() и простым вызовом асинхронной функции?

Вызов async def создаёт coroutine, await ожидает awaitable в текущей задаче, а create_task планирует отдельную Task. Event loop возобновляет готовые задачи, переключаясь при реальном ожидании.

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

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

Вызов async def создаёт coroutine, await ожидает awaitable в текущей задаче, а create_task планирует отдельную Task. Event loop возобновляет готовые задачи, переключаясь при реальном ожидании.

Подробный разбор

Ответ с пояснениями

Вызов async def создаёт coroutine, await ожидает awaitable в текущей задаче, а create_task планирует отдельную Task. Event loop возобновляет готовые задачи, переключаясь при реальном ожидании.

Сам по себе объект coroutine не выполняет весь код функции при создании. Task управляет его продвижением и результатом; особенности немедленного старта зависят от task factory и настроек. Await не обязательно отдаёт управление, если результат уже готов. Асинхронность кооперативна: блокирующая функция или долгий CPU-цикл в потоке event loop задержит остальные задачи.

Источник: peps.python.org.

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

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

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

Подробнее