Встречается на собеседованиях • сегодня

Что такое Event Loop в Python

Event Loop (цикл событий) в Python — это фундаментальный механизм библиотеки asyncio, который координирует выполнение асинхронного кода, обработку событий и управление задачами. Он позволяет организовать неблокирующую параллельность в рамках одного потока.

Зачем нужен Event Loop?

- Однопоточная асинхронность: Запуск множества I/O-операций (сеть, файлы) без создания потоков.

- Эффективность: Избегает затрат на переключение контекста между потоками.

- Управление задачами: Планирует выполнение корутин (coroutines) и callback-ов.

Как работает?

Бесконечный цикл, который:

- Отслеживает события (например, готовность данных в сокете).

- Выполняет готовые к работе корутины.

- Переключается между задачами при возникновении await.

Пример работы:

text
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())

Вывод:

text
Начало 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).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

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

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы