9 веб-серверов Python, которые стоит попробовать для вашего следующего проекта

Опубликовано: 2022-09-06

В этом списке мы представляем несколько веб-серверов Python, которые вы можете использовать для развертывания приложений Python.

Мы начнем с понимания того, как работают веб-серверы, и необходимости интерфейсов серверных шлюзов. Затем мы рассмотрим список веб-серверов Python вместе с их основными функциями. Большинство из них доступны в виде пакетов PyPI, которые вы можете установить и начать использовать в своих проектах.

Давайте начнем!

Что такое веб-сервер?

При разработке приложения Python вы будете использовать сервер разработки для тестирования своего приложения. Однако после завершения разработки вам придется развернуть приложение на сервере производственного уровня. Среди нескольких уровней дополнительной функциональности веб-сервер должен иметь базовую функциональность HTTP-сервера.

python-веб-сервер

Веб-сервер Python должен иметь возможность обрабатывать HTTP-запросы (простые HTTP-запросы, такие как GET, PUT и POST) от клиентов, таких как веб-браузеры, и возвращать ответ. Этот ответ может включать код состояния HTTP, указывающий, был ли запрос обработан успешно или нет. Он может состоять из веб-страниц HTML и частично структурированных данных, таких как JSON, XML и т. д.

ASGI против WSGI: понимание интерфейсов серверного шлюза

Предположим, вы разработали приложение Python в выбранной вами среде, скажем, Django или Flask. Обычный сервер может быть не в состоянии понять и обработать запросы, направленные к приложению Python. Здесь в игру вступают интерфейсы серверного шлюза.

Этот интерфейс шлюза может быть интерфейсом шлюза веб-сервера ( WSGI ) или интерфейсом асинхронного шлюза сервера ( ASGI ). Веб-сервер получает запрос от клиента, который затем перенаправляет на интерфейс шлюза сервера. Интерфейс (WSGI/ASGI) взаимодействует с приложением Python через открытый вызываемый объект.

Python-веб-сервер-asgi-wsgi

Интерфейс шлюза веб-сервера ( WSGI ) обрабатывает запросы последовательно. Если есть несколько медленных HTTP-запросов, они повлияют на пропускную способность.

Асинхронный интерфейс серверного шлюза, или ASGI, является преемником WSGI и имеет дополнительную возможность асинхронной обработки запросов.

Предположим, что текущий обслуживаемый запрос требует чтения базы данных (что потенциально может занять много времени) и ожидает ответа. Когда первый запрос ожидает ответа, ASGI может обработать второй входящий запрос.

Это отличается от WSGI, где первый запрос должен быть обработан до второго запроса. Следовательно, использование ASGI может привести к увеличению пропускной способности. ASGI также позволяет использовать асинхронные возможности Python в вашем приложении.

Веб-серверы Python

Теперь давайте перечислим веб-серверы, которые вы можете использовать для своих приложений Python. Мы также включили определенные платформы, которые обеспечивают готовую поддержку серверов, готовых к работе. Это не исчерпывающий список, и приведенные ниже рекомендации по веб-серверам не упорядочены.

Увикорн

Если вы знакомы с разработкой приложений с помощью FastAPI, вы наверняка сталкивались с Uvicorn, реализацией веб-сервера. Uvicorn — это реализация сервера ASGI для Python.

python-веб-сервер-uvicorn

Чтобы установить Uvicorn и связанные с ним зависимости с помощью pip , выполните следующую команду:

 $ pip install uvicorn[standard] # includes installation of optional and Cython-based dependencies

Ниже приведены характерные особенности Uvicorn:

  • Реализация АСГИ
  • Поддержка запуска приложений из асинхронной среды Python.
  • Инструмент командной строки с обширным списком параметров
  • Поддерживает запуск приложений из заводских функций
  • Предоставляет функции для программного управления экземплярами сервера.

Гуникорн

Gunicorn — это сервер WSGI для приложений Python, хорошо известный своими расширенными функциями управления процессами.

gunicorn-python-веб-сервер

Uvicorn предоставляет рабочий класс Gunicorn, позволяющий одновременно достигать преимуществ в производительности и управлении процессами. Эта страница документации содержит подробную информацию о развертывании Gunicorn.

Если у вас Python 3.5 и более поздние версии, вы можете установить Gunicorn с помощью pip:

 $ pip install gunicorn

Ниже приведены характерные особенности Gunicorn:

  • Просто и быстро
  • Совместимость со многими веб-фреймворками
  • Поддержка использования с прокси-сервером HTTP
  • Расширенное управление процессами

CherryPy

CherryPy — это веб-фреймворк Python, такой же, как Django, Flask и FastAPI, но не такой популярный, как эти фреймворки. Выпустив несколько стабильных выпусков, CherryPy существует уже более десяти лет и превратилась в полноценную платформу. У него также есть поддерживающее сообщество разработчиков.

вишневый

Вы можете ознакомиться с интересным Zen of CherryPy, который передает сущность того, что CherryPy — это простой и минималистичный, но мощный фреймворк.

CherryPy — это фреймворк Python, а не веб-сервер, но он есть в нашем списке, поскольку изначально поддерживает сервер производственного уровня, в отличие от большинства других фреймворков.

Чтобы установить CherryPy и начать работу, запустите:

 $ pip install CherryPy

Ниже приведены основные функции CherryPy:

  • Фреймворк Pythonic с использованием объектно-ориентированного Python; хорошо подходит для начинающих
  • Поддержка готового HTTP-сервера Cheroot
  • Легче учиться, чем другие веб-фреймворки, такие как Django.
  • Поддержка создания и развертывания простых веб-приложений в микросервисах.

Дафна

Django — один из самых популярных веб-фреймворков Python. Если вы разрабатывали приложения с помощью Django, вы, вероятно, использовали веб-сервер Daphne. Daphne — одна из первых реализаций сервера ASGI, используемая в качестве эталона для реализаций сервера ASGI.

Daphne доступна в виде пакета PyPI, который можно установить с помощью pip.

 $ pip install daphne

Вот подробное руководство, которое поможет вам создать полнофункциональное готовое к производству приложение Python.

Ниже приведены характерные черты Дафны:

  • Широко применяется в производственной среде
  • Справочник по всем реализациям сервера ASGI
  • Поддержка протоколов HTTP, HTTP2 и WebSocket.

Питон Трио

Проект Trio направлен на предоставление возможностей асинхронного ввода-вывода производственного уровня: поддержку параллельного ввода-вывода и параллелизма. В этом проекте также есть несколько веб- и HTTP-библиотек Python.

Вы можете установить последнюю версию Trio (июнь 2022 г.) из PyPI.

 $ pip install trio

Вот список полезных библиотек Trio для веб-программирования на Python:

  • hypercorn : Hypercorn — это сервер ASGI, поддерживающий HTTP.
  • muffin : Muffin — это веб-фреймворк ASGI для Python.
  • startlette : Starlette — это легкий фреймворк ASGI.
  • trio-websocket : поддержка сервера и клиента WebSocket
  • httpx : HTTP-клиент для Python

Скрученная паутина

Twisted — это фреймворк для приложений Python. Этот управляемый событиями фреймворк включает в себя модуль для веб-программирования под названием twisted.web .

Вы можете установить Twisted и связанные с ним модули с помощью pip:

 $ pip install Twisted

Ниже приведены характерные особенности Twisted:

  • Удобные для разработчиков функции, такие как модульное тестирование и статическая проверка кода.
  • twisted.web предоставляет сервер WSGI и поддержку HTTP-клиентов и серверов.

AIOHTTP

AIOHTTP — это библиотека Python, которая предоставляет клиентские и серверные возможности через клиентский и серверный API.

Вот полезное видео, объясняющее возможности асинхронного программирования на стороне клиента для значительного ускорения запросов к API.

Ниже приведены характерные особенности AIOHTTP:

  • Поддержка как HTTP-сервера, так и клиентской функциональности.
  • Поддержка ведения журнала для облегчения отладки; обеспечивает ведение журнала для клиента, сервера, веб-сокетов и т. д.
  • Встроенная поддержка тестирования через подключаемый модуль pytest для тестирования: pytest-aiohttp, который доступен в виде пакета PyPI.

Торнадо

Tornado — еще одна веб-инфраструктура Python, поддерживающая асинхронную сеть. В последние годы было выпущено много стабильных выпусков Tornado — самая последняя версия 6.2 была выпущена в июле 2022 года. В настоящее время Tornado поддерживает Python 3.7 и более поздние версии.

Как и большинство пакетов в этом списке, Tornado также можно установить с помощью pip :

 $ pip install tornado

Ниже приведены характерные особенности Tornado:

  • Поддержка HTTP-сервера tornado.httpserver и клиента
  • Масштабируемость и использование неблокирующего сетевого ввода-вывода
  • Хорошо подходит для приложений, требующих подключения в течение значительно более длительного интервала времени
  • Утилиты для ведения журнала, модульного тестирования и т. д.
  • Полная интеграция со службами аутентификации

Майнхельд

Meinheld — это сервер WSGI для Python. Он использует и создает существующие библиотеки для обработки событий и HTTP-запросов.

Вы можете установить Meinheld с помощью pip:

 $ pip install meinheld

Некоторые особенности Майнхельда:

  • Использует библиотеку http-parser для обработки входящих HTTP-запросов.
  • Создан на основе библиотеки picoev для обработки событий.

Вывод

Я надеюсь, что этот список веб-серверов Python был вам полезен. Обязательно попробуйте их в своих будущих проектах. Мы перечислили ключевые особенности; чтобы полностью понять зависимости и то, как они работают, вам придется использовать их в своих приложениях.

Если вы хотите улучшить свои навыки Python, рассмотрите возможность ознакомиться с библиотекой учебных пособий по Python на Geekflare. Удачного кодирования!