Как устроен asyncio
Python
Senior
VK
Как устроен asyncio
Ответы
Asyncio — это библиотека Python для асинхронного программирования, основанная на концепции event loop (цикла событий). Она использует корутины (coroutines) и ключевые слова `async/await` для неблокирующего выполнения задач.
**Основные компоненты:**
- **Event Loop** — управляет выполнением корутин и обрабатывает события (I/O, таймеры).
- **Корутины** — функции, объявленные через `async def`, которые могут приостанавливать выполнение через `await`.
- **Футуры (Futures)** — объекты, представляющие результат асинхронной операции.
- **Задачи (Tasks)** — подкласс Future, обёртка вокруг корутины для запуска в event loop.
**Пример:**
```
import asyncio
async def foo():
print("Start")
await asyncio.sleep(1) # Неблокирующая задержка
print("End")
async def main():
task = asyncio.create_task(foo()) # Запуск корутины как задачи
await task # Ожидание завершения
asyncio.run(main()) # Запуск event loop
```
**Принцип работы:**
- Event loop выполняет корутины по очереди.
- При встрече `await` управление возвращается в loop, который может переключиться на другую задачу.
- I/O операции выполняются асинхронно через системные вызовы (epoll/kqueue).