В чём отличие Task (задачи) от coroutine (корутины) в asyncio? В event loop выполняются задачи или корутины?

Coroutine-объект описывает приостановляемое вычисление; Task управляет его выполнением, результатом и отменой в event loop. Прямой вызов async-функции ещё не запускает её тело.

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

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

Coroutine-объект описывает приостановляемое вычисление; Task управляет его выполнением, результатом и отменой в event loop. Прямой вызов async-функции ещё не запускает её тело.

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

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

Coroutine-объект описывает приостановляемое вычисление; Task управляет его выполнением, результатом и отменой в event loop. Прямой вызов async-функции ещё не запускает её тело.

asyncio.create_task(coro()) планирует coroutine в отдельной Task. Внутри уже работающей задачи можно await другую coroutine напрямую, не создавая новую Task для каждого уровня. На низком уровне event loop выполняет callbacks и возобновляет готовые задачи по событиям I/O и таймерам. Поэтому противопоставление «только задачи или только корутины» слишком грубое: Task является механизмом исполнения coroutine. Вызов без await или планирования оставит coroutine невыполненной.

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

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

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

Подробнее