У цьому списку ми представляємо кілька веб-серверів Python, які можна використовувати для розгортання програм Python.
Ми почнемо з розуміння того, як працюють веб-сервери та потреби в інтерфейсах серверних шлюзів. Потім ми розглянемо список веб-серверів Python разом із їхніми основними функціями. Більшість із них доступні як пакети PyPI, які ви можете встановити та почати використовувати у своїх проектах.
Давайте почнемо!
Що таке веб-сервер?
Розробляючи програму Python, ви використовуватимете сервер розробки для тестування програми. Однак після завершення розробки вам доведеться розгорнути свою програму на сервері робочого рівня. Серед кількох верхніх рівнів додаткових функцій веб-сервер повинен мати базові функції HTTP-сервера.
Веб-сервер Python повинен мати можливість обробляти HTTP-запити (прості HTTP-запити, такі як GET, PUT і POST) від клієнтів, наприклад веб-браузерів, і повертати відповідь. Ця відповідь може містити код статусу HTTP, який вказує на те, успішно чи ні оброблено запит. Він може складатися з веб-сторінок HTML і напівструктурованих даних, таких як JSON, XML тощо.
ASGI проти WSGI: розуміння інтерфейсів шлюзу сервера
Припустімо, ви розробили програму Python у фреймворку за вашим вибором, скажімо, Django або Flask. Звичайний сервер може бути не в змозі зрозуміти та обробити запити, спрямовані до програми Python. Тут вступають у гру інтерфейси серверних шлюзів.
Цей інтерфейс шлюзу може бути інтерфейсом шлюзу веб-сервера (WSGI) або інтерфейсом шлюзу асинхронного сервера (ASGI). Веб-сервер отримує запит від клієнта, який потім перенаправляє на інтерфейс шлюзу сервера. Інтерфейс (WSGI/ASGI) взаємодіє з програмою Python через відкритий виклик.
Інтерфейс шлюзу веб-сервера (WSGI) обробляє запити послідовно. Якщо є кілька повільних запитів HTTP, вони впливатимуть на пропускну здатність.
Інтерфейс асинхронного серверного шлюзу, або 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 існує та перетворився на повноцінну структуру протягом більше десяти років. Він також має підтримку спільноти розробників.
Ви можете ознайомитися з цікавим Zen CherryPy, який передає суть того, що CherryPy — це проста і мінімалістична, але потужна структура.
CherryPy — це фреймворк Python, а не веб-сервер, але він у нашому списку, оскільки він ізначально підтримує сервер продуктивного рівня — на відміну від більшості інших фреймворків.
Щоб інсталювати CherryPy і почати роботу, запустіть:
$ pip install CherryPy
Нижче наведено основні функції CherryPy:
- Pythonic framework з використанням об’єктно-орієнтованого Python; добре підходить для новачків
- Підтримка готового до виробництва HTTP-сервера Cheroot
- Легше в освоєнні, ніж інші веб-фреймворки, такі як Django
- Підтримка створення та розгортання простих веб-програм у мікросервісах
Дафна
Django є одним із найпопулярніших веб-фреймворків Python. Якщо ви розробляли програми за допомогою Django, ви, швидше за все, використовували веб-сервер Daphne. Daphne є однією з перших реалізацій сервера ASGI, яка використовується як еталон для реалізацій сервера ASGI.
Daphne доступний як пакет PyPI, який можна встановити за допомогою pip.
$ pip install daphne
Ось детальний підручник, який допоможе вам створити готову додатку Python із повним стеком.
Нижче наведено основні риси Дафни:
- Широко застосовується у виробничих середовищах
- Довідник для всіх реалізацій сервера ASGI
- Підтримка протоколів HTTP, HTTP2 і WebSocket
Тріо 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 — ще один веб-фреймворк 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
Деякі особливості Meinheld:
- Використовує бібліотеку аналізатора http для обробки вхідних запитів HTTP
- Створюється на основі бібліотеки picoev для обробки подій
Висновок
Сподіваюся, цей список веб-серверів Python був для вас корисним. Обов’язково спробуйте їх у своїх майбутніх проектах. Ми перерахували ключові функції; щоб повністю зрозуміти залежності та як вони працюють, вам доведеться використовувати їх у своїх програмах. 👩🏽💻
Якщо ви хочете покращити свої навички роботи з Python, спробуйте ознайомитися з бібліотекою посібників з Python від techukraine.net. Щасливого кодування!