Как устроен механизм 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`) позволяют эффективно использовать ресурсы.