9 serwerów WWW w Pythonie do wypróbowania w następnym projekcie

W tym liście przedstawiamy kilka serwerów WWW w języku Python, których możesz użyć do wdrożenia aplikacji w języku Python.

Zaczniemy od zrozumienia, jak działają serwery WWW i potrzeby interfejsów bram serwera. Następnie omówimy listę serwerów internetowych Pythona wraz z ich najważniejszymi funkcjami. Większość z nich jest dostępna jako pakiety PyPI, które możesz zainstalować i zacząć używać w swoich projektach.

Zaczynajmy!

Co to jest serwer WWW?

Podczas tworzenia aplikacji w języku Python będziesz używać serwera programistycznego do testowania aplikacji. Jednak po zakończeniu programowania konieczne będzie wdrożenie aplikacji na serwerze klasy produkcyjnej. Wśród kilku warstw dodatkowych funkcji na górze serwer WWW powinien mieć podstawową funkcjonalność serwera HTTP.

Serwer WWW Pythona powinien być w stanie obsłużyć żądania HTTP (proste żądania HTTP, takie jak GET, PUT i POST) od klientów, takich jak przeglądarki internetowe, i zwrócić odpowiedź. Ta odpowiedź może zawierać kod stanu HTTP wskazujący, czy żądanie zostało przetworzone pomyślnie, czy nie. Może składać się ze stron internetowych HTML i częściowo ustrukturyzowanych danych, takich jak JSON, XML i innych.

ASGI kontra WSGI: Zrozumienie interfejsów bram serwera

Załóżmy, że stworzyłeś aplikację Pythona w wybranym przez siebie frameworku, powiedzmy, Django lub Flask. Konwencjonalny serwer może nie być w stanie zrozumieć i przetworzyć żądań kierowanych do aplikacji Pythona. Tutaj w grę wchodzą interfejsy bram serwera.

Ten interfejs bramy może być interfejsem bramy serwera sieci Web (WSGI) lub interfejsem bramy serwera asynchronicznego (ASGI). Serwer WWW otrzymuje żądanie od klienta, które następnie przekierowuje do interfejsu bramy serwera. Interfejs (WSGI/ASGI) wchodzi w interakcję z aplikacją Pythona poprzez udostępnioną możliwość wywołania.

Interfejs bramy serwera WWW (WSGI) obsługuje żądania sekwencyjnie. Jeśli istnieje wiele powolnych żądań HTTP, wpłyną one na przepustowość.

Asynchronous Server Gateway Interface lub ASGI jest następcą WSGI i ma dodatkową możliwość asynchronicznej obsługi żądań.

Załóżmy, że aktualnie obsługiwane żądanie wymaga odczytu bazy danych (co potencjalnie może zająć dużo czasu) i czeka na odpowiedź. Gdy pierwsze żądanie oczekuje na odpowiedź, ASGI może obsłużyć drugie przychodzące żądanie.

Jest to w przeciwieństwie do WSGI, gdzie pierwsze żądanie musi zostać przetworzone dla drugiego żądania. Dlatego używanie ASGI może skutkować zwiększeniem przepustowości. ASGI pozwala również na wykorzystanie asynchronicznych możliwości Pythona w Twojej aplikacji.

Serwery WWW w Pythonie

Teraz wypisz serwery internetowe, których możesz używać w swoich aplikacjach Pythona. Zawarliśmy również pewne frameworki, które zapewniają gotową obsługę serwerów gotowych do produkcji. Nie jest to wyczerpująca lista, a poniższe zalecenia dotyczące serwerów internetowych nie są podane w określonej kolejności.

Uvicorn

Jeśli jesteś zaznajomiony z tworzeniem aplikacji za pomocą FastAPI, natkniesz się na Uvicorn, implementację serwera WWW. Uvicorn to implementacja serwera ASGI dla Pythona.

Aby zainstalować Uvicorn i powiązane zależności za pomocą pip, uruchom następujące polecenie:

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

Oto najważniejsze cechy Uvicorn:

  • Wdrożenie ASGI
  • Obsługa uruchamiania aplikacji z asynchronicznego środowiska Python
  • Narzędzie wiersza poleceń z obszerną listą opcji
  • Obsługuje uruchamianie aplikacji z funkcji fabrycznych
  • Zapewnia funkcje do programowego kontrolowania instancji serwera

Gunicorn

Gunicorn to serwer WSGI dla aplikacji Python, dobrze znany z zaawansowanych funkcji zarządzania procesami.

Uvicorn oferuje klasę pracowników Gunicorn, umożliwiając jednoczesne osiągnięcie korzyści związanych z wydajnością i zarządzaniem procesami. Ta strona dokumentacji zawiera szczegółowe informacje na temat wdrażania Gunicorn.

Jeśli masz Pythona 3.5 lub nowszego, możesz zainstalować Gunicorn za pomocą pip:

$ pip install gunicorn

Oto najważniejsze cechy Gunicorn:

  • Prosty i szybki
  • Kompatybilny z wieloma frameworkami internetowymi
  • Wsparcie dla użycia z serwerem proxy HTTP
  • Zaawansowane zarządzanie procesami

CherryPy

CherryPy to framework sieciowy Pythona — podobnie jak Django, Flask i FastAPI — ale nie tak popularny jak te frameworki. Dzięki kilku stabilnym wydaniom CherryPy istnieje i przekształcił się w pełnoprawny framework od ponad dekady. Ma również wspierającą społeczność programistów.

Możesz zapoznać się z interesującym Zen of CherryPy, który przekazuje esencję, że CherryPy jest prostym i minimalistycznym, a jednocześnie potężnym frameworkiem.

CherryPy to framework Pythona, a nie serwer WWW, ale znajduje się na naszej liście, ponieważ natywnie obsługuje serwer klasy produkcyjnej — w przeciwieństwie do większości innych frameworków.

Aby zainstalować CherryPy i zacząć, uruchom:

$ pip install CherryPy

Oto najważniejsze cechy CherryPy:

  • Framework pythonowy wykorzystujący Python zorientowany obiektowo; dobrze nadaje się dla początkujących
  • Wsparcie dla gotowego do produkcji serwera HTTP, Cheroot
  • Łatwiejsze do nauczenia niż inne frameworki internetowe, takie jak Django
  • Wsparcie dla tworzenia i wdrażania prostych aplikacji internetowych w mikroserwisach

Daphne

Django to jeden z najpopularniejszych frameworków webowych w Pythonie. Jeśli tworzyłeś aplikacje w Django, prawdopodobnie używałeś serwera WWW Daphne. Daphne to jedna z pierwszych implementacji serwera ASGI, używana jako odniesienie dla implementacji serwera ASGI.

Daphne jest dostępny jako pakiet PyPI, który można zainstalować za pomocą pip.

$ pip install daphne

Oto szczegółowy samouczek, który przeprowadzi Cię przez proces tworzenia pełnej aplikacji gotowej do produkcji w języku Python.

Oto najważniejsze cechy Daphne:

  • Szeroko stosowany w środowiskach produkcyjnych
  • Odniesienie do wszystkich implementacji serwera ASGI
  • Obsługa protokołów HTTP, HTTP2 i WebSocket

Trio Pythona

Projekt Trio ma na celu zapewnienie asynchronicznych możliwości we/wy klasy produkcyjnej: obsługa równoległego we/wy i współbieżności. Ten projekt ma również kilka bibliotek internetowych i HTTP Python.

Możesz zainstalować najnowszą wersję Trio (czerwiec 2022) z PyPI.

$ pip install trio

Oto lista przydatnych bibliotek Trio do programowania internetowego w Pythonie:

  • hypercorn: Hypercorn to serwer ASGI obsługujący HTTP
  • muffin: Muffin to webowy framework ASGI dla Pythona
  • startlette: Starlette to lekki framework ASGI
  • trio-websocket: obsługa serwera i klienta WebSocket
  • httpx: klient HTTP dla Pythona

Zakręcona sieć

Twisted to framework dla aplikacji Pythona. Ten oparty na zdarzeniach framework zawiera moduł do programowania internetowego o nazwie twisted.web.

Możesz zainstalować Twisted i powiązane moduły za pomocą pip:

$ pip install Twisted

Oto najważniejsze cechy Twisteda:

  • Przyjazne dla programistów funkcje, takie jak testowanie jednostkowe i statyczne sprawdzanie kodu
  • twisted.web zapewnia serwer WSGI oraz obsługę klientów i serwerów HTTP

AIOHTTP

AIOHTTP to biblioteka Pythona, która zapewnia możliwości po stronie klienta i serwera za pośrednictwem interfejsów API klienta i serwera.

Oto przydatny film wyjaśniający możliwości programowania asynchronicznego po stronie klienta w celu znacznego przyspieszenia żądań do interfejsów API.

Oto najważniejsze cechy AIOHTTP:

  • Wsparcie zarówno dla funkcjonalności serwera HTTP, jak i klienta
  • Obsługa logowania w celu ułatwienia debugowania; zapewnia logowanie dla klienta, serwera, gniazd sieciowych i nie tylko
  • Natywna obsługa testowania przez pytest Plugin do testowania: pytest-aiohttp, który jest dostępny jako pakiet PyPI

Tornado

Tornado to kolejny framework webowy Pythona, który obsługuje sieci asynchroniczne. W ostatnich latach pojawiło się wiele stabilnych wydań Tornado – najnowsza wersja 6.2 została wydana w lipcu 2022 roku. Obecnie Tornado obsługuje Pythona 3.7 i nowsze.

Podobnie jak większość pakietów z tej listy, Tornado można również zainstalować za pomocą pip:

$ pip install tornado

Oto najważniejsze cechy Tornado:

  • Wsparcie dla serwera HTTP tornado.httpserver i klient
  • Skalowalny i wykorzystuje nieblokujące we/wy sieciowe
  • Dobrze nadaje się do zastosowań wymagających łączności przez znacznie dłuższy czas
  • Narzędzia do logowania, testowania jednostkowego i nie tylko
  • Bezproblemowa integracja z usługami uwierzytelniania

Meinheld

Meinheld to serwer WSGI dla Pythona. Wykorzystuje i buduje istniejące biblioteki do obsługi zdarzeń i przetwarzania żądań HTTP.

Możesz zainstalować Meinheld za pomocą pip:

$ pip install meinheld

Niektóre cechy Meinhelda:

  • Wykorzystuje bibliotekę http-parser do obsługi przychodzących żądań HTTP
  • Opiera się na bibliotece picoev do obsługi zdarzeń

Wniosek

Mam nadzieję, że ten wykaz serwerów WWW w Pythonie okazał się pomocny. Koniecznie wypróbuj je w swoich przyszłych projektach. Wymieniliśmy najważniejsze cechy; aby w pełni zrozumieć zależności i sposób ich działania, będziesz musiał użyć ich w swoich aplikacjach. 👩🏽‍💻

Jeśli chcesz podnieść swoje umiejętności w zakresie Pythona, rozważ zapoznanie się z biblioteką samouczków Pythona newsblog.pl. Udanego kodowania!