Зачем нужен 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.