Как устроен механизм async/await в Python
Python
Senior
Без компании
Как устроен механизм async/await в Python
Ответы
Механизм async/await в Python основан на корутинах (coroutines) и цикле событий (event loop).
**Корутины** — это специальные функции, объявленные через `async def`. При вызове они возвращают объект корутины, а не выполняются сразу.
**Await** приостанавливает выполнение корутины, пока ожидаемая операция (обычно I/O) не завершится, но не блокирует поток.
**Event loop** управляет выполнением корутин, переключаясь между ними при ожидании.
Пример:
```
import asyncio
async def fetch_data():
print("Начало загрузки")
await asyncio.sleep(2) # Имитация I/O
print("Данные загружены")
return "Результат"
async def main():
task = asyncio.create_task(fetch_data())
print("Делаем что-то параллельно")
result = await task
print(f"Получено: {result}")
asyncio.run(main())
```
**Ключевые моменты:**
- `async` определяет корутину.
- `await` передает управление обратно в event loop.
- Для запуска используется `asyncio.run()`.
- Не блокирующие вызовы (например, `asyncio.sleep`) позволяют эффективно использовать ресурсы.