Назовите основные функции модуля asyncio в Python

Ответ

Модуль asyncio предоставляет инфраструктуру для написания однопоточного конкурентного кода с использованием корутин. Ключевые функции:

  • asyncio.run(coro): Высокоуровневая точка входа для запуска асинхронной программы. Автоматически создает и управляет циклом событий (event loop).

  • asyncio.create_task(coro): Планирует асинхронную функцию для параллельного (конкурентного) выполнения в цикле событий. Немедленно возвращает объект Task, не дожидаясь завершения корутины.

  • asyncio.gather(*aws): Запускает несколько асинхронных операций одновременно и возвращает список их результатов после того, как все они будут завершены.

  • asyncio.sleep(delay): Неблокирующая пауза. Приостанавливает выполнение текущей корутины на delay секунд, позволяя циклу событий выполнять другие задачи.

  • asyncio.wait_for(aw, timeout): Ожидает завершения асинхронной операции с указанным таймаутом. Если время истекло, вызывает исключение asyncio.TimeoutError.

  • asyncio.to_thread(func, *args): Асинхронно запускает блокирующую (синхронную) функцию в отдельном потоке, не блокируя основной цикл событий. Это основной способ интеграции legacy-кода.

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

import asyncio
import time

async def fetch_data(source: str):
    print(f"Начинаю загрузку из {source}...")
    await asyncio.sleep(1) # Имитация I/O операции
    print(f"Загрузка из {source} завершена.")
    return {"source": source, "data": "..."}

async def main():
    start_time = time.time()

    # Запускаем обе задачи конкурентно
    task1 = asyncio.create_task(fetch_data("API"))
    task2 = asyncio.create_task(fetch_data("DB"))

    # Ожидаем завершения обеих задач
    results = await asyncio.gather(task1, task2)
    print(f"Получены результаты: {results}")

    end_time = time.time()
    print(f"Все операции заняли {end_time - start_time:.2f} секунд.")

# Запускаем основную корутину
asyncio.run(main())
# Вывод покажет, что общее время выполнения ~1 секунда, а не 2.