Что такое асинхронное программирование в Python

Ответ

Асинхронное программирование в Python — это парадигма, позволяющая эффективно выполнять операции ввода-вывода (I/O-bound задачи, например, сетевые запросы, чтение/запись файлов) без блокировки основного потока выполнения. Вместо того чтобы ждать завершения одной операции, программа может переключиться на другую задачу, используя событийный цикл (event loop). Это повышает отзывчивость и пропускную способность приложения.

Ключевые концепции:

  • async/await: Синтаксис для определения асинхронных функций (корутин) и ожидания их результатов. await приостанавливает выполнение текущей корутины, позволяя событийному циклу выполнять другие задачи.
  • asyncio: Стандартная библиотека Python, предоставляющая инфраструктуру для написания конкурентного кода с использованием синтаксиса async/await.
  • Корутины (coroutines): Специальные функции, которые могут быть приостановлены и возобновлены. Они являются строительными блоками асинхронного кода.

Пример использования asyncio:

import asyncio

async def fetch_data(delay: int, name: str) -> str:
    """Имитирует асинхронную операцию, например, сетевой запрос."""
    print(f"[{name}] Начало загрузки...")
    await asyncio.sleep(delay)  # Имитация долгой I/O операции
    print(f"[{name}] Данные загружены.")
    return f"Результат от {name}"

async def main():
    print("Запуск основной асинхронной функции.")
    # Создаем несколько задач, которые будут выполняться конкурентно
    task1 = asyncio.create_task(fetch_data(2, "Задача 1"))
    task2 = asyncio.create_task(fetch_data(1, "Задача 2"))

    print("Делаем что-то ещё, пока задачи выполняются...")
    # Ожидаем завершения всех задач
    result1 = await task1
    result2 = await task2

    print(f"Получены результаты: {result1}, {result2}")

if __name__ == "__main__":
    # asyncio.run() запускает событийный цикл и выполняет главную корутину
    asyncio.run(main())

Почему это важно: Асинхронное программирование особенно полезно для приложений, где много времени тратится на ожидание внешних операций (например, веб-серверы, парсеры, боты), так как оно позволяет эффективно использовать ресурсы CPU, не блокируя выполнение других задач.