9 веб-серверів Python для наступного проекту

У цьому огляді ми розглянемо різноманітні веб-сервери Python, які можна застосовувати для розгортання ваших Python-програм.

Спочатку ми розглянемо, як саме функціонують веб-сервери та яку роль відіграють інтерфейси шлюзів сервера. Далі ми детально проаналізуємо ряд веб-серверів Python, зосереджуючись на їхніх ключових особливостях. Більшість з них доступні як пакети PyPI, що дозволяє легко встановити та інтегрувати їх у ваші проекти.

Розпочнімо!

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

Під час розробки програми на Python, ви, швидше за все, використовуєте сервер розробки для її тестування. Однак, коли розробка завершена, вам потрібно буде розгорнути вашу програму на сервері виробничого рівня. Крім різних додаткових функцій, веб-сервер повинен мати основні можливості HTTP-сервера.

Веб-сервер Python повинен ефективно обробляти HTTP-запити (наприклад, GET, PUT та POST) від клієнтів, таких як веб-браузери, і надавати відповідь. Ця відповідь може містити код стану HTTP, який вказує на успішність обробки запиту, а також веб-сторінки HTML та дані в форматах, як JSON або XML.

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

Уявімо, що ви створили Python-програму, використовуючи певний фреймворк, наприклад Django або Flask. Звичайний сервер може виявитися нездатним зрозуміти та обробити запити, що надходять до вашої програми. Саме тут стають у пригоді інтерфейси шлюзів сервера.

Цей шлюз може бути інтерфейсом шлюзу веб-сервера (WSGI) або інтерфейсом шлюзу асинхронного сервера (ASGI). Веб-сервер отримує запит від клієнта та перенаправляє його на інтерфейс шлюзу сервера. Інтерфейс (WSGI/ASGI) взаємодіє з вашою Python-програмою через спеціальний виклик.

Інтерфейс шлюзу веб-сервера (WSGI) обробляє запити в послідовному порядку. Якщо надійде кілька запитів, що потребують тривалого часу обробки, це може негативно вплинути на пропускну здатність.

Інтерфейс асинхронного серверного шлюзу (ASGI) є наступником WSGI і має додаткову можливість асинхронної обробки запитів.

Наприклад, якщо обробка запиту вимагає читання даних з бази даних (що може зайняти певний час), ASGI може обробляти інший запит, поки перший очікує на відповідь.

На відміну від WSGI, де другий запит може бути оброблений лише після завершення обробки першого, ASGI дозволяє збільшити пропускну здатність. Крім того, ASGI дозволяє використовувати асинхронні можливості Python у вашій програмі.

Огляд веб-серверів Python

Далі наведемо перелік веб-серверів, які ви можете використовувати для своїх Python-програм. Ми також згадаємо деякі фреймворки, які надають вбудовану підтримку серверів, готових до продакшену. Цей список не є вичерпним, і порядок не відображає рейтинг.

Uvicorn

Якщо ви працювали з FastAPI, то, ймовірно, знайомі з Uvicorn, реалізацією веб-сервера. Uvicorn – це ASGI-сервер для Python.

Щоб встановити Uvicorn та необхідні залежності за допомогою pip, скористайтеся наступною командою:

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

Основні особливості Uvicorn включають:

  • Реалізація ASGI
  • Підтримка запуску асинхронних Python-програм
  • Інтерфейс командного рядка з різними параметрами
  • Можливість запуску програм з функцій-фабрик
  • Функції програмного керування екземплярами сервера

Gunicorn

Gunicorn – це WSGI-сервер для Python-програм, відомий своїми можливостями керування процесами.

Uvicorn пропонує Gunicorn-робітник, що дозволяє одночасно використовувати переваги продуктивності та керування процесами. Детальніше про розгортання Gunicorn можна дізнатися у відповідній документації.

Для Python 3.5 і вище, Gunicorn можна встановити за допомогою pip:

$ pip install gunicorn

Основні особливості Gunicorn:

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

CherryPy

CherryPy є веб-фреймворком для Python, схожим на Django, Flask та FastAPI, але менш популярним. З моменту свого створення CherryPy перетворився на повноцінний фреймворк з підтримкою спільноти розробників.

Ви можете ознайомитися із “зеном” CherryPy, який відображає суть цього фреймворку – простоту, мінімалізм і потужність.

Хоча CherryPy є фреймворком, а не веб-сервером, ми включили його до списку, оскільки він має вбудовану підтримку сервера виробничого рівня, на відміну від інших фреймворків.

Для встановлення та початку роботи з CherryPy, скористайтеся командою:

$ pip install CherryPy

Основні особливості CherryPy:

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

Daphne

Django є одним з найпопулярніших веб-фреймворків Python. Якщо ви розробляли програми за допомогою Django, то, ймовірно, використовували веб-сервер Daphne. Daphne є однією з перших реалізацій ASGI-сервера, і вона служить орієнтиром для інших реалізацій.

Daphne доступний як пакет PyPI, який можна встановити за допомогою pip.

$ pip install daphne

Ось детальний посібник, який допоможе вам створити готовий до продакшену веб-додаток Python.

Основні особливості Daphne:

  • Широке застосування у виробничих середовищах
  • Еталон для реалізації ASGI-серверів
  • Підтримка протоколів HTTP, HTTP2 та WebSocket

Trio Python

Проект 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 Web

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

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

Як і більшість пакетів у цьому списку, Tornado можна встановити за допомогою pip:

$ pip install tornado

Основні особливості Tornado:

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

Meinheld

Meinheld – це WSGI-сервер для Python. Він використовує існуючі бібліотеки для обробки подій та HTTP-запитів.

Meinheld можна встановити за допомогою pip:

$ pip install meinheld

Особливості Meinheld:

  • Використання бібліотеки HTTP-парсингу для обробки вхідних HTTP-запитів
  • Оснований на бібліотеці picoev для обробки подій

Висновок

Сподіваємося, цей список веб-серверів Python був для вас корисним. Обов’язково протестуйте їх у ваших майбутніх проектах. Ми надали огляд ключових функцій, але для повного розуміння залежностей та їхньої роботи вам доведеться випробувати їх на практиці. 👩🏽‍💻

Якщо ви бажаєте покращити свої навички роботи з Python, ознайомтеся з бібліотекою посібників з Python на techukraine.net. Бажаємо успішного програмування!