Python
Средний
Как работает асинхронность в Python?
Асинхронность в Python
Основные концепции:
Event Loop (Цикл событий):
Менеджер, который переключает выполнение между корутинами.
Coroutine (Корутина):
Функция, которая может приостанавливать выполнение.
import asyncio
async def fetch_data():
print("Start fetching")
await asyncio.sleep(2) # Неблокирующее ожидание
print("Done fetching")
return {"data": 123}
# Запуск
asyncio.run(fetch_data())
Ключевые слова:
async def — объявление корутины
await — ожидание завершения асинхронной операции
Параллельное выполнение:
async def main():
# Последовательно (6 секунд)
await task1()
await task2()
await task3()
# Параллельно (2 секунды)
results = await asyncio.gather(
task1(),
task2(),
task3()
)
asyncio.run(main())
Создание задач:
async def main():
# Task запускается сразу
task = asyncio.create_task(fetch_data())
# Делаем другую работу...
# Ожидаем результат
result = await task
Таймауты:
async def main():
try:
result = await asyncio.wait_for(
slow_operation(),
timeout=5.0
)
except asyncio.TimeoutError:
print("Operation timed out")
Когда использовать:
| Тип задачи | Решение |
|---|---|
| I/O-bound (сеть, файлы) | asyncio |
| CPU-bound (вычисления) | multiprocessing |
| Простая параллельность | threading |
Сравнение с потоками:
# Threads — переключение ОС (preemptive)
# Asyncio — переключение в await (cooperative)
asyncio эффективнее для тысяч I/O операций (меньше overhead).
Похожие вопросы
Готовитесь к собеседованию?
ENIGMA AI — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно