I den här genomgången presenterar vi ett urval av webbservrar för Python, som du kan använda för att driftsätta dina Python-applikationer.
Vi inleder med en förklaring av hur webbservrar fungerar, samt behovet av gränssnitt för servergateways. Därefter går vi igenom en lista med olika webbservrar för Python, tillsammans med deras viktigaste egenskaper. De flesta av dessa är tillgängliga som PyPI-paket, vilka du kan installera och börja använda i dina projekt.
Låt oss börja utforska!
Vad är en webbserver?
Under utvecklingen av en Python-applikation används en utvecklingsserver för att testa appen. När utvecklingen är avslutad, måste appen distribueras på en produktionsklar server. En webbserver bör, utöver många andra funktionaliteter, ha grundläggande funktioner som en HTTP-server.
En Python-webbserver ska kunna ta emot HTTP-förfrågningar (som GET, PUT och POST) från klienter, exempelvis webbläsare, och skicka tillbaka svar. Svaret kan inkludera en HTTP-statuskod som indikerar om begäran har behandlats korrekt eller inte. Det kan även bestå av HTML-sidor och semistrukturerad data som JSON, XML och mer.
ASGI kontra WSGI: Förstå gränssnitt för servergateways
Anta att du har skapat en Python-applikation med ett ramverk, som Django eller Flask. En traditionell server kan ha svårt att tolka och hantera förfrågningar som riktas till Python-applikationen. Det är här gränssnitt för servergateways kommer in i bilden.
Detta gränssnitt kan vara antingen WSGI (Web Server Gateway Interface) eller ASGI (Asynchronous Server Gateway Interface). Webbservern tar emot en förfrågan från en klient, som den vidarebefordrar till serverns gateway-gränssnitt. Gränssnittet (WSGI/ASGI) kommunicerar sedan med Python-applikationen genom en exponerad anropsbar funktion.
Web Server Gateway Interface (WSGI) hanterar förfrågningar i turordning. Om det förekommer många långsamma HTTP-förfrågningar kommer detta att påverka genomströmningen.
Asynchronous Server Gateway Interface, eller ASGI, är en vidareutveckling av WSGI och har förmågan att hantera förfrågningar asynkront.
Föreställ dig att en pågående förfrågan kräver en databasfråga (vilket kan ta tid) och väntar på svar. Medan den första förfrågan väntar, kan ASGI hantera en andra inkommande förfrågan.
Detta skiljer sig från WSGI, där den första förfrågan måste slutföras innan den andra kan hanteras. Genom att använda ASGI kan du därmed uppnå en högre genomströmning. ASGI ger dig också möjligheten att använda asynkrona Python-funktioner i din applikation.
Webbservrar för Python
Nu presenterar vi en lista över webbservrar som du kan använda för dina Python-applikationer. Vi har även inkluderat vissa ramverk som har stöd för produktionsklara servrar direkt. Detta är inte en komplett lista, och webbserverrekommendationerna nedan presenteras utan inbördes ordning.
Uvicorn
Om du har erfarenhet av applikationsutveckling med FastAPI, har du troligtvis stött på Uvicorn, en implementering av en webbserver. Uvicorn är en ASGI-server för Python.
För att installera Uvicorn och tillhörande beroenden med pip, använd följande kommando:
$ pip install uvicorn[standard] # inkluderar installation av valfria och Cython-baserade beroenden
Följande är några av Uvicorns utmärkande egenskaper:
- ASGI implementering
- Stöd för att köra appar från en asynkron Python-miljö
- Kommandoradsverktyg med många alternativ
- Stödjer körning av applikationer från fabriksfunktioner
- Ger funktionalitet 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 har en Gunicorn-arbetarklass, vilket gör att du kan dra nytta av både prestanda och processhantering. Den här dokumentationssidan ger mer information om hur du distribuerar Gunicorn.
Om du har Python 3.5 eller senare, kan du installera Gunicorn med pip:
$ pip install gunicorn
Här är några av Gunicorns utmärkande egenskaper:
- Enkel och snabb
- Kompatibel med många webbramverk
- Stöd för att användas med en HTTP-proxyserver
- Avancerad processhantering
CherryPy
CherryPy är ett Python-webbramverk – som Django, Flask och FastAPI – men inte lika populärt. Med flera stabila utgåvor har CherryPy funnits och utvecklats till ett fullfjädrat ramverk under mer än ett årtionde. Det har också en aktiv utvecklargemenskap.
Du kan ta del av CherryPys ”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 inkluderas på vår lista eftersom det inbyggt stöder en produktionsklar server – till skillnad från de flesta andra ramverk.
För att installera CherryPy och komma igång, använd:
$ pip install CherryPy
Här är några av CherryPys utmärkande egenskaper:
- Pythoniskt ramverk med objektorienterad Python; lämpar sig väl 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 driftsätta enkla webbappar till mikrotjänster
Daphne
Django är ett av de mest använda webbramverken i Python. Om du har utvecklat applikationer med Django, har du troligtvis använt webbservern Daphne. Daphne är en av de första ASGI-serverimplementationerna och används som referens för andra ASGI-serverimplementeringar.
Daphne är tillgängligt som ett PyPI-paket, som du kan installera med pip.
$ pip install daphne
Här finns en detaljerad handledning som guidar dig genom att bygga en produktionsklar fullstack Python-applikation.
Följande är Daphnes utmärkande egenskaper:
- Används i stor utsträckning i produktionsmiljöer
- Referens för alla ASGI-serverimplementationer
- Stöd för HTTP-, HTTP2- och WebSocket-protokoll
Python Trio
Trio-projektet har som mål att erbjuda produktionsklara asynkrona I/O-funktioner, med stöd för parallell I/O och samtidighet. Det här projektet innehåller även flera webb- och HTTP Python-bibliotek.
Du kan installera den senaste versionen av Trio (från 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 har stöd för HTTP
- muffin: Muffin är ett ASGI-webbramverk för Python
- startlette: Starlette är ett lättviktigt 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. Det här händelsedrivna ramverket innehåller en modul för webbprogrammering, som heter twisted.web.
Du kan installera Twisted och tillhörande moduler med pip:
$ pip install Twisted
Här är några av Twisteds utmärkande egenskaper:
- Utvecklarvänliga funktioner, som enhetstester och statisk kodanalys
- twisted.web tillhandahåller en WSGI-server samt stöd för HTTP-klienter och servrar
AIOHTTP
AIOHTTP är ett Python-bibliotek som erbjuder både 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 anrop till API:er avsevärt.
Följande är några av AIOHTTP:s utmärkande egenskaper:
- Stöd för både HTTP-server- och klientfunktionalitet
- Stöd för loggning, som förenklar felsökning; loggning för klient, server, webbsockets och mer
- Inbyggt stöd för tester med hjälp av pytest-plugin för testning: pytest-aiohttp, som är tillgängligt som ett PyPI-paket
Tornado
Tornado är ytterligare ett Python-webbramverk som stöder asynkron nätverkshantering. Det har gjorts många stabila utgåvor av Tornado de senaste åren – den senaste versionen 6.2 släpptes i juli 2022. För närvarande har Tornado stöd för Python 3.7 och senare.
Precis som de flesta paket i den här listan, kan Tornado installeras med pip:
$ pip install tornado
Följande är några av Tornados utmärkande egenskaper:
- Stöd för HTTP-server (tornado.httpserver) och klient
- Skalbar och använder icke-blockerande nätverks-I/O
- Lämplig för applikationer som kräver anslutning under längre perioder
- Verktyg för loggning, enhetstestning med mera
- Smidig integration med autentiseringstjänster
Meinheld
Meinheld är en WSGI-server för Python. Den använder och bygger på befintliga bibliotek för händelsehantering och hantering av HTTP-förfrågningar.
Du kan installera Meinheld med pip:
$ pip install meinheld
Några av Meinhelds funktioner:
- Använder http-parser-biblioteket för att hantera inkommande HTTP-förfrågningar
- Bygger på picoev-biblioteket för händelsehantering
Sammanfattning
Jag hoppas att du fann den här listan över webbservrar för Python användbar. Se till att testa dem i dina framtida projekt. Vi har listat de viktigaste funktionerna. För att fullt ut förstå beroenden och funktionalitet behöver du testa dem i dina egna applikationer. 👩🏽💻
Om du vill förbättra dina Python-kunskaper, kan du ta del av adminvista.com bibliotek med handledningar för Python. Lycka till med kodningen!