Что отвечает за переключение контекста в asyncio
Python
Middle
СБЕР Центр ИИ
Что отвечает за переключение контекста в asyncio
Ответы
В asyncio переключение контекста между корутинами (тасками) управляется **event loop**. Основные моменты:
- Event loop решает, когда переключаться между задачами, основываясь на:
- `await` выражениях (точки переключения)
- I/O операциях (когда сокет/файл готов)
- таймерах (`asyncio.sleep()`)
- явных вызовах `loop.call_soon()`
- Пример переключения:
```
async def task1():
print("Start 1")
await asyncio.sleep(1) # Точка переключения
print("End 1")
async def task2():
print("Start 2")
await asyncio.sleep(0.5) # Точка переключения
print("End 2")
asyncio.run(asyncio.gather(task1(), task2()))
```
- Важно: переключение происходит только в точках `await`, если корутина не отдает управление (например, долгий синхронный код), event loop блокируется.