Coroutine-объект описывает приостановляемое вычисление; Task управляет его выполнением, результатом и отменой в event loop. Прямой вызов async-функции ещё не запускает её тело.
В чём отличие Task (задачи) от coroutine (корутины) в asyncio? В event loop выполняются задачи или корутины?
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 невыполненной.