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

Photo of author

By maciekx

Ten artykuł omawia różne serwery WWW napisane w języku Python, które mogą być użyte do wdrożenia aplikacji.

Rozpoczniemy od wyjaśnienia, jak działają serwery WWW i dlaczego potrzebne są interfejsy bram serwera. Następnie przedstawimy listę serwerów internetowych Pythona, wraz z ich kluczowymi cechami. Większość z nich dostępna jest jako pakiety PyPI, co ułatwia ich instalację i użycie w projektach.

Przejdźmy do szczegółów!

Czym jest serwer WWW?

Podczas tworzenia aplikacji w Pythonie, do testowania używa się serwera programistycznego. Jednak po zakończeniu prac programistycznych, aplikację trzeba przenieść na serwer produkcyjny. Serwer WWW powinien realizować podstawowe funkcje serwera HTTP, a także mieć dodatkowe warstwy funkcjonalności.

Serwer WWW Pythona musi obsługiwać żądania HTTP (takie jak GET, PUT i POST) od klientów, np. przeglądarek, i wysyłać odpowiedzi. Odpowiedź może zawierać kod stanu HTTP informujący o powodzeniu lub niepowodzeniu żądania. Może też składać się ze stron HTML oraz ustrukturyzowanych danych, np. JSON czy XML.

ASGI kontra WSGI: Interfejsy bram serwera

Załóżmy, że aplikacja Pythona została stworzona przy użyciu wybranego frameworka, takiego jak Django czy Flask. Zwykły serwer może nie być w stanie poprawnie przetworzyć żądań skierowanych do takiej aplikacji. W tym miejscu kluczową rolę odgrywają interfejsy bram serwera.

Taki interfejs może być interfejsem bramy serwera WWW (WSGI) lub asynchronicznym interfejsem bramy serwera (ASGI). Serwer WWW odbiera żądanie od klienta i przekazuje je do interfejsu bramy serwera. Interfejs (WSGI/ASGI) komunikuje się z aplikacją Pythona poprzez mechanizm wywołania.

Interfejs bramy serwera WWW (WSGI) obsługuje żądania w sposób sekwencyjny. Jeśli napłynie wiele czasochłonnych żądań HTTP, wpłynie to negatywnie na wydajność.

Asynchroniczny Interfejs Bramy Serwera (ASGI) jest następcą WSGI i obsługuje żądania w sposób asynchroniczny.

Załóżmy, że aktualnie obsługiwane żądanie wymaga odczytu danych z bazy danych (co może zająć sporo czasu). Podczas gdy pierwsze żądanie czeka na odpowiedź, ASGI może obsłużyć kolejne żądanie.

W przypadku WSGI, drugie żądanie musi czekać na przetworzenie pierwszego. Dlatego ASGI pozwala na zwiększenie wydajności i umożliwia wykorzystanie asynchronicznych możliwości Pythona w aplikacji.

Serwery WWW w Pythonie

Poniżej znajduje się lista serwerów internetowych, które można wykorzystać w aplikacjach Pythona. Uwzględniono również frameworki, które posiadają wbudowaną obsługę serwerów gotowych do pracy w środowisku produkcyjnym. Nie jest to wyczerpująca lista, a kolejność serwerów jest przypadkowa.

Uvicorn

Osoby korzystające z frameworka FastAPI z pewnością spotkały się z serwerem Uvicorn. Jest to implementacja serwera ASGI dla Pythona.

Aby zainstalować Uvicorn wraz z niezbędnymi zależnościami, należy użyć polecenia:

$ pip install uvicorn[standard]
# zawiera instalację opcjonalnych zależności oraz tych opartych na Cythonie

Najważniejsze cechy Uvicorn:

  • Implementacja ASGI
  • Możliwość uruchamiania aplikacji z asynchronicznego środowiska Python
  • Narzędzie wiersza poleceń z rozbudowanym zestawem opcji
  • Obsługa uruchamiania aplikacji za pomocą funkcji fabryk
  • Funkcje umożliwiające programowe kontrolowanie instancji serwera

Gunicorn

Gunicorn to serwer WSGI dla aplikacji Python, znany z zaawansowanych możliwości zarządzania procesami.

Uvicorn udostępnia klasę pracowników Gunicorn, umożliwiając jednoczesne korzystanie z wydajności i zaawansowanego zarządzania procesami. Dodatkowe informacje można znaleźć w dokumentacji na temat implementacji Gunicorn.

W przypadku posiadania Pythona 3.5 lub nowszego, instalacja Gunicorn odbywa się za pomocą polecenia:

$ pip install gunicorn

Najważniejsze cechy Gunicorn:

  • Prostota i szybkość działania
  • Kompatybilność z różnymi frameworkami internetowymi
  • Wsparcie dla użycia z serwerem proxy HTTP
  • Zaawansowane zarządzanie procesami

CherryPy

CherryPy to framework internetowy Pythona, podobny do Django, Flask i FastAPI, choć mniej popularny. Posiada stabilne wydania i rozwinął się w pełnoprawny framework na przestrzeni ponad dekady. Może się również pochwalić aktywną społecznością programistów.

Warto zapoznać się z filozofią CherryPy, która podkreśla, że jest to prosty, minimalistyczny i zarazem potężny framework.

Choć CherryPy jest frameworkiem, a nie serwerem WWW, znalazł się na tej liście, ponieważ natywnie obsługuje serwer produkcyjny, w przeciwieństwie do większości innych frameworków.

Instalacja CherryPy odbywa się za pomocą polecenia:

$ pip install CherryPy

Najważniejsze cechy CherryPy:

  • Wykorzystuje programowanie obiektowe w Pythonie; jest odpowiedni dla początkujących
  • Wsparcie dla gotowego do produkcji serwera HTTP, Cheroot
  • Łatwiejsza nauka w porównaniu do innych frameworków, np. Django
  • Możliwość tworzenia i wdrażania prostych aplikacji internetowych opartych o mikroserwisy

Daphne

Django jest jednym z najpopularniejszych frameworków webowych w Pythonie. Osoby tworzące aplikacje w Django prawdopodobnie korzystały z serwera WWW Daphne. Jest to jedna z pierwszych implementacji serwera ASGI, wykorzystywana jako wzorzec.

Daphne jest dostępny jako pakiet PyPI, który instaluje się za pomocą pip:

$ pip install daphne

Tutaj można znaleźć szczegółowy poradnik, który przeprowadzi przez proces tworzenia pełnej aplikacji gotowej do wdrożenia produkcyjnego w Pythonie.

Najważniejsze cechy Daphne:

  • Szerokie zastosowanie w środowiskach produkcyjnych
  • Wzorzec dla wszystkich implementacji serwera ASGI
  • Obsługa protokołów HTTP, HTTP2 i WebSocket

Trio Pythona

Projekt Trio koncentruje się na dostarczaniu asynchronicznych możliwości wejścia/wyjścia klasy produkcyjnej: wsparcie dla równoległego wejścia/wyjścia i współbieżności. W ramach projektu dostępne są również biblioteki internetowe i HTTP dla Pythona.

Najnowsza wersja Trio (czerwiec 2022) może być zainstalowana z PyPI:

$ pip install trio

Poniżej znajduje się lista przydatnych bibliotek Trio do tworzenia aplikacji internetowych w Pythonie:

  • hypercorn: Hypercorn to serwer ASGI z obsługą HTTP
  • muffin: Muffin to framework webowy ASGI dla Pythona
  • starlette: Starlette to lekki framework ASGI
  • trio-websocket: wsparcie dla serwera i klienta WebSocket
  • httpx: klient HTTP dla Pythona

Twisted

Twisted to framework dla aplikacji Pythona oparty na zdarzeniach, zawierający moduł twisted.web do programowania internetowego.

Instalacja Twisted i powiązanych modułów odbywa się za pomocą pip:

$ pip install Twisted

Najważniejsze cechy Twisted:

  • Funkcje przyjazne programistom, takie jak testy jednostkowe i statyczna analiza kodu
  • twisted.web dostarcza serwer WSGI, a także wsparcie dla klientów i serwerów HTTP

AIOHTTP

AIOHTTP to biblioteka Pythona, oferująca funkcje po stronie klienta i serwera za pośrednictwem interfejsów API.

Poniższy film wyjaśnia asynchroniczne możliwości programowania po stronie klienta, pozwalające na znaczne przyspieszenie żądań do interfejsów API.

Najważniejsze cechy AIOHTTP:

  • Wsparcie dla funkcjonalności serwera HTTP i klienta
  • Obsługa logowania w celu ułatwienia debugowania; dzienniki klienta, serwera, gniazd sieciowych itp.
  • Natywna obsługa testowania za pomocą wtyczki pytest: pytest-aiohttp, dostępnej jako pakiet PyPI

Tornado

Tornado to kolejny framework webowy Pythona z obsługą sieci asynchronicznych. W ostatnich latach wydano wiele stabilnych wersji Tornado, ostatnia 6.2 w lipcu 2022 roku. Aktualnie Tornado wspiera Pythona 3.7 i nowsze.

Podobnie jak większość pakietów z tej listy, Tornado instaluje się za pomocą pip:

$ pip install tornado

Najważniejsze cechy Tornado:

  • Wsparcie dla serwera HTTP tornado.httpserver i klienta
  • Skalowalność i wykorzystanie nieblokującego wejścia/wyjścia sieciowego
  • Dobrze sprawdza się w aplikacjach wymagających długotrwałego połączenia
  • Narzędzia do logowania, testowania jednostkowego itp.
  • Łatwa integracja z usługami uwierzytelniania

Meinheld

Meinheld to serwer WSGI dla Pythona. Wykorzystuje i opiera się na istniejących bibliotekach do obsługi zdarzeń i przetwarzania żądań HTTP.

Instalacja Meinheld odbywa się za pomocą polecenia:

$ pip install meinheld

Cechy Meinhelda:

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

Podsumowanie

Mamy nadzieję, że ten przegląd serwerów WWW w Pythonie okazał się pomocny. Zachęcamy do wypróbowania ich w przyszłych projektach. Przedstawiliśmy najważniejsze cechy, jednak aby w pełni zrozumieć zależności i sposób działania, konieczne jest użycie ich w praktyce. 👩🏽‍💻

Jeśli chcesz poszerzyć swoje umiejętności w Pythonie, warto zapoznać się z biblioteką samouczków dostępnych na newsblog.pl. Życzymy udanego kodowania!


newsblog.pl