Вопрос проверяет понимание того, как именно работает кооперативная многозадачность в асинхронном Python.
Event loop управляет выполнением асинхронных задач. Он запускает корутины и приостанавливает их, когда они ждут I/O. Переключение происходит в точках await. Пока одна задача ждёт, выполняются другие. Это позволяет одному потоку обслуживать много задач.
В асинхронном Python нет принудительного переключения, как в потоках.
Event loop — это цикл, который управляет выполнением задач и корутин.
Он:
запускает корутину
следит за её состоянием
возобновляет выполнение, когда готов результат
Важно понимать: переключение происходит добровольно.
Ключевое слово await — это точка, где задача говорит:
«Я не могу продолжать сейчас, вернусь позже»
В этот момент:
текущая корутина приостанавливается
управление возвращается event loop
loop переключается на другую готовую задачу
Пример:
async def fetch_data():
data = await socket_recv() # точка переключения
return data
Event loop обычно работает с несколькими структурами:
очередь готовых задач
список ожидающих I/O
таймеры и отложенные вызовы
Loop выбирает следующую задачу, которая готова к выполнению.
Event loop переключает задачи только в точках await. Это кооперативная модель, где каждая корутина сама отдаёт управление.