Какие существуют ASGI-серверы для Python?

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

Ответ

В экосистеме Python для запуска ASGI-приложений (таких как FastAPI, Starlette, Django 3+) используются несколько популярных серверов:

  1. Uvicorn Высокопроизводительный сервер, основанный на uvloop и httptools. Считается стандартом для разработки с фреймворками FastAPI и Starlette благодаря своей скорости и простоте.

    # Запуск для разработки с автоперезагрузкой
    uvicorn main:app --reload
  2. Hypercorn Гибкий сервер с поддержкой HTTP/2, HTTP/3 и альтернативных event loop, таких как Trio. Подходит для более сложных сценариев, требующих современных протоколов.

    hypercorn main:app
  3. Daphne Официальный сервер для Django Channels, изначально созданный для надежной поддержки WebSocket и других долгоживущих соединений.

    daphne myproject.asgi:application
  4. Связка Gunicorn + Uvicorn Это не отдельный сервер, а популярная production-конфигурация. Gunicorn выступает в роли менеджера процессов (worker manager), запуская и контролируя несколько Uvicorn процессов для обеспечения масштабируемости и отказоустойчивости.

    # Gunicorn управляет воркерами класса UvicornWorker
    gunicorn -k uvicorn.workers.UvicornWorker main:app