Вопрос проверяет понимание асинхронного программирования, корутин и работы цикла событий.
Корутины — это специальные функции, которые могут приостанавливать выполнение и возобновлять его. Event loop управляет выполнением корутин, переключаясь между ними при ожидании операций ввода-вывода.
Асинхронное программирование в Python построено на корутинах и цикле событий, которые позволяют эффективно обрабатывать множество операций в одном потоке.
Корутины:
Объявляются с async def
Могут приостанавливаться с await
Возвращают управление event loop при ожидании
Event Loop:
Управляет выполнением корутин
Мониторит готовность операций ввода-вывода
Переключается между готовыми к выполнению корутинами
Пример работы:
import asyncio
async def task1():
print("Начало task1")
await asyncio.sleep(1) # Приостановка на 1 секунду
print("Конец task1")
async def task2():
print("Начало task2")
await asyncio.sleep(0.5) # Приостановка на 0.5 секунды
print("Конец task2")
async def main():
# Запуск корутин параллельно
await asyncio.gather(task1(), task2())
# Запуск event loop
asyncio.run(main())Принцип работы:
Event loop запускает корутины
При встрече await корутина приостанавливается
Event loop переключается на другие готовые корутины
Когда операция завершается, корутина возобновляется