Какие ключевые библиотеки и фреймворки используются для асинхронного программирования в Python?

«Какие ключевые библиотеки и фреймворки используются для асинхронного программирования в Python?» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основой асинхронного программирования в Python является встроенный модуль asyncio, который предоставляет event loop и низкоуровневые API для управления корутинами. Большинство других асинхронных библиотек построены на его основе.

1. Основа: asyncio

Входит в стандартную библиотеку Python. Позволяет писать однопоточный конкурентный код с использованием синтаксиса async/await.

Почему это важно: Это фундамент, на котором строится вся экосистема.

import asyncio

async def say_hello_after(delay, name):
    await asyncio.sleep(delay)
    print(f"Hello, {name}!")

async def main():
    # Задачи выполняются конкурентно, а не последовательно
    task1 = asyncio.create_task(say_hello_after(1, 'World'))
    task2 = asyncio.create_task(say_hello_after(0.5, 'Python'))

    await task1
    await task2

asyncio.run(main())
# Вывод:
# Hello, Python!
# Hello, World!

2. Асинхронные веб-фреймворки

  • **FastAPI**: Современный, высокопроизводительный фреймворк, построенный на asyncio. Отличается автоматической генерацией документации и валидацией данных с помощью Pydantic.
  • **aiohttp**: Может использоваться и как клиент, и как сервер. Один из старейших и наиболее стабильных асинхронных фреймворков.

3. HTTP-клиенты

  • **httpx**: Современный HTTP-клиент, который поддерживает как синхронный, так и асинхронный API. Считается преемником requests для асинхронного мира.
  • **aiohttp.ClientSession**: Встроенный клиент в библиотеку aiohttp.

4. Работа с базами данных

  • **asyncpg**: Очень быстрая библиотека для работы с PostgreSQL.
  • **aiomysql**: Асинхронный драйвер для MySQL.
  • **motor**: Официальный асинхронный драйвер для MongoDB.

5. Распределенные задачи (Task Queues)

  • **Celery**: Хотя Celery не использует asyncio напрямую, это ключевой инструмент для выполнения фоновых и отложенных задач. Он работает в отдельных процессах (воркерах) и общается через брокер сообщений (например, RabbitMQ или Redis). Это другой, но очень важный тип асинхронности в Python-приложениях.