Что такое Event Loop в Python
Event Loop (цикл событий) в Python — это фундаментальный механизм библиотеки asyncio, который координирует выполнение асинхронного кода, обработку событий и управление задачами. Он позволяет организовать неблокирующую параллельность в рамках одного потока.
Зачем нужен Event Loop?
- Однопоточная асинхронность: Запуск множества I/O-операций (сеть, файлы) без создания потоков.
- Эффективность: Избегает затрат на переключение контекста между потоками.
- Управление задачами: Планирует выполнение корутин (coroutines) и callback-ов.
Как работает?
Бесконечный цикл, который:
- Отслеживает события (например, готовность данных в сокете).
- Выполняет готовые к работе корутины.
- Переключается между задачами при возникновении await.
Пример работы:
import asyncio
async def task1():
print("Начало task1")
await asyncio.sleep(1) # Неблокирующее ожидание
print("Конец task1")
async def task2():
print("Начало task2")
await asyncio.sleep(2)
print("Конец task2")
async def main():
await asyncio.gather(task1(), task2()) # Запуск задач параллельно
# Запуск event loop
asyncio.run(main())Вывод:
Начало task1
Начало task2
(через 1 сек) Конец task1
(через 2 сек) Конец task2Ключевые понятия:
- Корутины (coroutines): Функции, объявленные через async def, которые могут приостанавливаться (await).
- Задачи (Tasks): Обертки вокруг корутин, планируемые в event loop.
- Future: Объект, представляющий результат асинхронной операции.
Этапы работы Event Loop:
- Запуск через asyncio.run().
- Планирование задач (например, create_task).
- Ожидание событий (I/O, таймеры).
- Вызов callback-ов или возобновление корутин.
- Завершение после выполнения всех задач.
Что происходит при await?
1. Корутина приостанавливается и отдает управление обратно в event loop.
2. Event loop проверяет другие готовые задачи.
3. Когда ожидаемая операция завершается (например, данные получены), корутина возобновляется.
Важно:
- Event Loop работает в одном потоке (GIL не мешает, так как нет параллельных вычислений CPU).
- Для CPU-интенсивных задач лучше использовать многопроцессорность (multiprocessing).

офферы быстрее!
Следующий вопрос
Это единственный вопрос по вашему фильтру