Ответ
В экосистеме Python для запуска ASGI-приложений (таких как FastAPI, Starlette, Django 3+) используются несколько популярных серверов:
-
Uvicorn Высокопроизводительный сервер, основанный на
uvloopиhttptools. Считается стандартом для разработки с фреймворками FastAPI и Starlette благодаря своей скорости и простоте.# Запуск для разработки с автоперезагрузкой uvicorn main:app --reload -
Hypercorn Гибкий сервер с поддержкой HTTP/2, HTTP/3 и альтернативных event loop, таких как Trio. Подходит для более сложных сценариев, требующих современных протоколов.
hypercorn main:app -
Daphne Официальный сервер для Django Channels, изначально созданный для надежной поддержки WebSocket и других долгоживущих соединений.
daphne myproject.asgi:application -
Связка Gunicorn + Uvicorn Это не отдельный сервер, а популярная production-конфигурация.
Gunicornвыступает в роли менеджера процессов (worker manager), запуская и контролируя несколькоUvicornпроцессов для обеспечения масштабируемости и отказоустойчивости.# Gunicorn управляет воркерами класса UvicornWorker gunicorn -k uvicorn.workers.UvicornWorker main:app
Ответ 18+ 🔞
А, слушай, смотри, вот эти твои ASGI-приложения, типа FastAPI там или Starlette, их же на чем-то запускать надо, да? Не на пальцах же их крутить. Так вот, есть у нас тут несколько таких рабочих лошадок, которые это всё дело поднимают.
Первое, что в зубы сразу попадает — это Uvicorn. Ну, это типа как наш местный чемпион по скорости, потому что он на uvloop и httptools заточен. Все его юзают для разработки, потому что он быстрый и простой, как три копейки. Хочешь, чтобы код сам перезагружался, когда ты его меняешь? Легко, блядь.
uvicorn main:app --reload
Вот и вся магия. Написал, сохранил — сервер уже с новым кодом работает. Удобно, ёпта.
Дальше у нас Hypercorn. Этот чувак похитрее будет. Он тебе и HTTP/2 потянет, и HTTP/3, если очень захотеть. И с разными event loop'ами умеет работать, не только с asyncio. Если тебе нужны современные протоколы или какая-то нестандартная хуйня — он твой выбор.
hypercorn main:app
Потом есть Daphne. Это, можно сказать, спецназ для WebSocket'ов. Его изначально для Django Channels пилили, чтобы долгоживущие соединения не отваливались нахуй. Так что если у тебя там чаты, онлайн-игры или еще какая дичь с постоянной связью — присмотрись к нему.
daphne myproject.asgi:application
И наконец, король продакшена — связка Gunicorn + Uvicorn. Это когда ты берешь Gunicorn, который умеет управлять кучей процессов, и заставляешь его запускать не своих стандартных воркеров, а этих самых Uvicorn'овских. Получается такая армада из быстрых серверов, которые друг друга подстраховывают. Один загнётся — остальные будут работать, и пользователь даже не заметит, что там у тебя внутри пиздец творится. Красота же!
gunicorn -k uvicorn.workers.UvicornWorker main:app
Вот так вот, коротко и без воды. Выбирай, что под задачу подходит, и не парься. Главное — не пытайся всё это в одном скрипте запустить, а то получишь ебаный винегрет.