9 Python-webbservrar att prova för ditt nästa projekt

I den här listan presenterar vi flera Python-webbservrar som du kan använda för att distribuera dina Python-applikationer.

Vi börjar med att förstå hur webbservrar fungerar och behovet av servergateway-gränssnitt. Sedan går vi över listan över Python-webbservrar tillsammans med deras framträdande funktioner. De flesta av dem är tillgängliga som PyPI-paket som du kan installera och börja använda i dina projekt.

Låt oss börja!

Vad är en webbserver?

När du utvecklar en Python-applikation använder du utvecklingsservern för att testa din app. Men när utvecklingen är klar måste du distribuera din app på en produktionsklassad server. Bland flera lager av tillagd funktionalitet ovanpå bör en webbserver ha den grundläggande funktionaliteten hos en HTTP-server.

Python-webbservern bör kunna hantera HTTP-förfrågningar (enkla HTTP-förfrågningar som GET, PUT och POST) från klienter, såsom webbläsare, och returnera svaret. Detta svar kan innehålla HTTP-statuskoden som anger om begäran behandlades framgångsrikt eller inte. Det kan bestå av HTML-webbsidor och semistrukturerad data som JSON, XML och mer.

ASGI vs. WSGI: Förstå Server Gateway-gränssnitt

Anta att du har utvecklat en Python-applikation i ett ramverk som du väljer, säg Django eller Flask. En konventionell server kanske inte kan förstå och bearbeta förfrågningarna som riktas till Python-applikationen. Det är här server gateway-gränssnitt kommer in i bilden.

Detta gateway-gränssnitt kan vara ett WSGI (Web Server Gateway Interface) eller ett Asynchronous Server Gateway Interface (ASGI). Webbservern tar emot en begäran från en klient, som den sedan omdirigerar till serverns gateway-gränssnitt. Gränssnittet (WSGI/ASGI) interagerar med Python-applikationen genom en exponerad anropsbar.

Web Server Gateway Interface (WSGI) hanterar förfrågningar sekventiellt. Om det finns flera långsamma HTTP-förfrågningar kommer de att påverka genomströmningen.

Asynchronous Server Gateway Interface, eller ASGI, är en efterföljare till WSGI och har ytterligare förmåga att hantera förfrågningar asynkront.

Anta att en för närvarande betjänad begäran kräver en databasläsning (som potentiellt kan ta lång tid) och väntar på svaret. När den första förfrågan väntar på svar kan ASGI hantera en andra inkommande förfrågan.

Detta till skillnad från WSGI, där den första begäran måste behandlas för den andra begäran. Därför kan användning av ASGI resultera i ökad genomströmning. ASGI låter dig också använda asynkrona Python-funktioner i din applikation.

Python webbservrar

Lista nu webbservrarna du kan använda för dina Python-applikationer. Vi har också inkluderat vissa ramverk som ger direkt support för produktionsklara servrar. Detta är inte en uttömmande lista, och webbserverrekommendationerna nedan är inte i någon speciell ordning.

Uvicorn

Om du är bekant med applikationsutveckling med FastAPI har du stött på Uvicorn, en webbserverimplementering. Uvicorn är en ASGI-serverimplementering för Python.

För att installera Uvicorn och tillhörande beroenden med hjälp av pip, kör följande kommando:

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

Följande är Uvicorns framträdande egenskaper:

  • ASGI implementering
  • Stöd för att köra appar från en asynkron Python-miljö
  • Kommandoradsverktyget med en omfattande lista med alternativ
  • Stöder körning av applikationer från fabriksfunktioner
  • Tillhandahåller funktioner för att styra serverinstanser programmatiskt

Gunicorn

Gunicorn är en WSGI-server för Python-applikationer, välkänd för sina avancerade processhanteringsfunktioner.

Uvicorn ger en Gunicorn-arbetarklass, vilket gör att du kan uppnå prestations- och processledningsfördelar samtidigt. Den här dokumentationssidan innehåller information om hur du distribuerar Gunicorn.

Om du har Python 3.5 och senare kan du installera Gunicorn med hjälp av pip:

$ pip install gunicorn

Följande är Gunicorns framträdande egenskaper:

  • Enkelt och snabbt
  • Kompatibel med många webbramverk
  • Stöd för användning med en HTTP-proxyserver
  • Avancerad processhantering

CherryPy

CherryPy är ett Python-webbramverk – precis som Django, Flask och FastAPI – men inte lika populärt som dessa ramverk. Med flera stabila utgåvor har CherryPy funnits och har utvecklats till ett fullfjädrat ramverk i över ett decennium. Den har också en stödjande utvecklargemenskap.

Du kan kolla in den intressanta Zen of CherryPy, som förmedlar essensen av att CherryPy är ett enkelt och minimalistiskt men ändå kraftfullt ramverk.

CherryPy är ett Python-ramverk och inte en webbserver, men det finns på vår lista eftersom det inbyggt stöder en produktionsklassad server – till skillnad från de flesta andra ramverk.

För att installera CherryPy och komma igång, kör:

$ pip install CherryPy

Följande är CherryPys framträdande egenskaper:

  • Pythonic ramverk med objektorienterad Python; väl lämpad för nybörjare
  • Stöd för en produktionsklar HTTP-server, Cheroot
  • Lättare att lära sig än andra webbramverk, som Django
  • Stöd för att bygga och distribuera enkla webbappar till mikrotjänster

Daphne

Django är ett av Pythons mest populära webbramverk. Om du har utvecklat applikationer med Django har du troligen använt Daphnes webbserver. Daphne är en av de första ASGI-serverimplementeringarna som används som referens för ASGI-serverimplementationer.

Daphne finns som ett PyPI-paket som du kan installera med hjälp av pip.

$ pip install daphne

Här är en detaljerad handledning som leder dig genom att bygga en produktionsklar Python-applikation i full stack.

Följande är Daphnes framträdande egenskaper:

  • Utbredd i produktionsmiljöer
  • Referens för alla ASGI-serverimplementationer
  • Stöd för HTTP-, HTTP2- och WebSocket-protokoll

Python Trio

Trio-projektet syftar till att tillhandahålla produktionsklassade asynkrona I/O-möjligheter: stöd för parallell I/O och samtidighet. Detta projekt har också flera webb- och HTTP Python-bibliotek.

Du kan installera den senaste versionen av Trio (juni 2022) från PyPI.

$ pip install trio

Här är en lista över användbara Trio-bibliotek för webbprogrammering med Python:

  • hypercorn: Hypercorn är en ASGI-server som stöder HTTP
  • muffin: Muffin är ett ASGI-webbramverk för Python
  • startlette: Starlette är ett lätt ASGI-ramverk
  • trio-websocket: stöd för WebSocket-server och klient
  • httpx: HTTP-klient för Python

Twisted Web

Twisted är ett ramverk för Python-applikationer. Detta händelsedrivna ramverk innehåller en modul för webbprogrammering som kallas twisted.web.

Du kan installera Twisted och tillhörande moduler med hjälp av pip:

$ pip install Twisted

Följande är Twisteds framträdande egenskaper:

  • Utvecklarvänliga funktioner som enhetstestning och statisk kodkontroll
  • twisted.web tillhandahåller en WSGI-server och stöd för HTTP-klienter och servrar

AIOHTTP

AIOHTTP är ett Python-bibliotek som tillhandahåller klient- och serverfunktioner genom klient- och server-API:erna.

Här är en användbar video som förklarar de asynkrona programmeringsfunktionerna på klientsidan för att påskynda förfrågningar till API:er avsevärt.

Följande är de framträdande egenskaperna hos AIOHTTP:

  • Stöd för både HTTP-server- och klientfunktionalitet
  • Stöd för loggning för att underlätta enklare felsökning; ger loggning för en klient, server, webbsockets och mer
  • Inbyggt stöd för testning genom pytest-plugin för testning: pytest-aiohttp, som är tillgängligt som ett PyPI-paket

Tornado

Tornado är ett annat Python-webbramverk som stöder asynkront nätverk. Under de senaste åren har det funnits många stabila utgåvor av Tornado – den senaste versionen 6.2 släpptes i juli 2022. För närvarande stöder Tornado Python 3.7 och senare.

Som de flesta paket i den här listan kan Tornado också installeras med pip:

$ pip install tornado

Följande är Tornados framträdande egenskaper:

  • Stöd för HTTP-server tornado.httpserver och klient
  • Skalbar och använder icke-blockerande nätverks-I/O
  • Väl lämpad för applikationer som kräver anslutning under ett betydligt längre tidsintervall
  • Verktyg för loggning, enhetstestning och mer
  • Sömlös integration med tjänster för autentisering

Meinheld

Meinheld är en WSGI-server för Python. Den använder och bygger befintliga bibliotek för händelsehantering och bearbetning av HTTP-förfrågningar.

Du kan installera Meinheld med pip:

$ pip install meinheld

Några funktioner hos Meinheld:

  • Använder http-parser-biblioteket för att hantera inkommande HTTP-förfrågningar
  • Bygger ovanpå picoev-biblioteket för händelsehantering

Slutsats

Jag hoppas att du tyckte att denna lista över Python-webbservrar var användbar. Se till att prova dem i dina framtida projekt. Vi har listat nyckelfunktionerna; för att till fullo förstå beroenden och hur de fungerar måste du använda dem i dina applikationer. 👩🏽‍💻

Om du vill höja dina Python-färdigheter, överväg att kolla in adminvista.com bibliotek med Python-handledningar. Glad kodning!