Назад к подготовке

Зачем нужен asyncio event loop в Python

Как работает async/await в Python и чем concurrency через event loop отличается от parallel execution?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

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

asyncio дает cooperative concurrency для IO-bound задач. Корутина сама отдает управление на await, event loop переключает готовые задачи, но CPU-bound код без await будет блокировать loop.

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

async/await в Python нужен, когда много ожидания внешних операций: сеть, БД, файловые операции, timers. Корутина выполняется до await, затем отдает управление event loop. Loop может запустить другую готовую корутину, пока первая ждет IO.

Это concurrency, а не автоматический parallel CPU execution. В одном event loop код обычно выполняется в одном потоке, поэтому тяжелый CPU-bound цикл заблокирует все остальные корутины. Для CPU-bound нужны multiprocessing, native extensions, worker pool или вынос работы в отдельный сервис.

Плюс asyncio — высокий throughput для большого числа одновременных IO-запросов без большого числа потоков. Цена — нужно не блокировать loop, правильно обрабатывать cancellations/timeouts и использовать async-compatible клиенты.

Теория

Event loop — scheduler cooperative tasks. Он эффективен, если задачи регулярно освобождают управление через await и внешние операции действительно неблокирующие.

Типичные ошибки

  • Сказать, что async автоматически ускоряет CPU-bound код.
  • Вызывать blocking requests/DB client внутри async handler.
  • Не упомянуть cancellation и timeout.

Как отвечать на собеседовании

  • Сразу разделяй IO-bound concurrency и CPU-bound parallelism.
  • Назови опасность: blocking call внутри event loop.