Вызов async def создаёт coroutine, await ожидает awaitable в текущей задаче, а create_task планирует отдельную Task. Event loop возобновляет готовые задачи, переключаясь при реальном ожидании.
Как под капотом работает 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 возобновляет готовые задачи, переключаясь при реальном ожидании.
Сам по себе объект coroutine не выполняет весь код функции при создании. Task управляет его продвижением и результатом; особенности немедленного старта зависят от task factory и настроек. Await не обязательно отдаёт управление, если результат уже готов. Асинхронность кооперативна: блокирующая функция или долгий CPU-цикл в потоке event loop задержит остальные задачи.
Источник: peps.python.org.