ENIGMA AI
ENIGMA AI
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 — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы