I denne oversikten presenterer vi en rekke webservere for Python som du kan bruke til å distribuere dine Python-applikasjoner.
Vi begynner med å undersøke hvordan webservere fungerer og behovet for et servergrensesnitt. Deretter ser vi nærmere på en liste over webservere for Python, inkludert deres fremtredende funksjoner. De fleste av dem er tilgjengelige som PyPI-pakker som du enkelt kan installere og ta i bruk i prosjektene dine.
La oss sette i gang!
Hva er en webserver?
Når du utvikler en Python-applikasjon, benytter du deg av en utviklingsserver for å teste appen. Men når utviklingen er fullført, må applikasjonen distribueres på en produksjonsklar server. I tillegg til flere lag med ekstra funksjonalitet, må en webserver ha den grunnleggende funksjonaliteten til en HTTP-server.
En Python webserver skal være i stand til å behandle HTTP-forespørsler (slike som GET, PUT og POST) fra klienter, som for eksempel nettlesere, og returnere et svar. Dette svaret kan inkludere en HTTP-statuskode som indikerer hvorvidt forespørselen ble behandlet korrekt eller ikke. Det kan også bestå av HTML-nettsider, semistrukturerte data som JSON, XML, og andre formater.
ASGI vs. WSGI: Forstå servergrensesnitt
La oss anta at du har utviklet en Python-applikasjon ved hjelp av et rammeverk som Django eller Flask. En tradisjonell server vil kanskje ikke være i stand til å forstå og behandle forespørslene som er rettet til Python-applikasjonen. Det er her servergrensesnittene kommer inn i bildet.
Disse grensesnittene kan være et Web Server Gateway Interface (WSGI) eller et Asynchronous Server Gateway Interface (ASGI). Webserveren mottar en forespørsel fra en klient, som den deretter sender videre til serverens grensesnitt. Grensesnittet (WSGI/ASGI) samhandler med Python-applikasjonen gjennom en definert funksjon.
Web Server Gateway Interface (WSGI) håndterer forespørsler sekvensielt. Hvis det finnes flere langsomme HTTP-forespørsler, vil dette påvirke ytelsen.
Asynchronous Server Gateway Interface, eller ASGI, er en etterfølger til WSGI, med den tilleggsfunksjonen at den kan håndtere forespørsler asynkront.
Tenk deg at en forespørsel som betjenes, krever en databaseoperasjon (som potensielt kan ta tid) og venter på et svar. Mens den første forespørselen venter, kan ASGI behandle en andre innkommende forespørsel.
Dette er ulikt WSGI, der den første forespørselen må behandles før den andre kan håndteres. Derfor kan bruk av ASGI resultere i forbedret ytelse. ASGI tillater deg også å bruke asynkrone Python-funksjoner i applikasjonen din.
Python webservere
La oss nå se på webservere du kan bruke for dine Python-applikasjoner. Vi har også inkludert noen rammeverk som gir direkte støtte for produksjonsklare servere. Dette er ikke en fullstendig liste, og anbefalingene er ikke listet i en bestemt rekkefølge.
Uvicorn
Hvis du har erfaring med applikasjonsutvikling i FastAPI, har du sannsynligvis kommet over Uvicorn, en webserverimplementasjon. Uvicorn er en ASGI-serverimplementasjon for Python.
For å installere Uvicorn og de nødvendige avhengighetene med pip, kjører du følgende kommando:
$ pip install uvicorn[standard] # inkluderer installasjon av valgfrie og Cython-baserte avhengigheter
Her er noen av Uvicorns fremtredende egenskaper:
- ASGI implementering
- Støtte for å kjøre applikasjoner fra et asynkront Python-miljø
- Kommandolinjeverktøy med en rekke alternativer
- Støtte for å kjøre applikasjoner fra fabrikkfunksjoner
- Gir funksjoner for å kontrollere serverinstanser programmatisk
Gunicorn
Gunicorn er en WSGI-server for Python-applikasjoner, kjent for sine avanserte funksjoner for prosesshåndtering.
Uvicorn tilbyr en Gunicorn-arbeiderklasse, slik at du kan oppnå fordeler med tanke på ytelse og prosessadministrasjon. Her finner du mer detaljert dokumentasjon om distribusjon av Gunicorn.
Hvis du har Python 3.5 eller nyere, kan du installere Gunicorn med pip:
$ pip install gunicorn
Her er noen av Gunicorns fremtredende funksjoner:
- Enkel og rask
- Kompatibel med mange webrammeverk
- Støtte for bruk med en HTTP-proxy-server
- Avansert prosesshåndtering
CherryPy
CherryPy er et Python-webrammeverk – som Django, Flask og FastAPI – men det er ikke like populært som disse. CherryPy har eksistert og utviklet seg til et fullverdig rammeverk i over et tiår, med flere stabile utgivelser. Det har også et aktivt utviklermiljø.
Du kan ta en titt på Zen of CherryPy, som illustrerer essensen av at CherryPy er et enkelt og minimalistisk, men likevel kraftig rammeverk.
CherryPy er et Python-rammeverk og ikke en webserver, men det er med på listen vår da det naturlig støtter en produksjonsklar server – i motsetning til de fleste andre rammeverk.
For å installere CherryPy og komme i gang, kjører du:
$ pip install CherryPy
Her er noen av CherryPys fremtredende funksjoner:
- Python-rammeverk basert på objektorientert Python; godt egnet for nybegynnere
- Støtte for en produksjonsklar HTTP-server, Cheroot
- Lettere å lære enn andre webrammeverk, som Django
- Støtte for å bygge og distribuere enkle webapper til mikrotjenester
Daphne
Django er et av de mest populære Python-webrammeverkene. Hvis du har utviklet applikasjoner med Django, har du sannsynligvis brukt Daphne-webserveren. Daphne er en av de første ASGI-serverimplementasjonene som brukes som referanse for andre ASGI-serverimplementasjoner.
Daphne er tilgjengelig som en PyPI-pakke, som du kan installere med pip.
$ pip install daphne
Her er en detaljert opplæring som tar deg gjennom prosessen med å bygge en fullstack produksjonsklar Python-applikasjon.
Her er noen av Daphnes fremtredende funksjoner:
- Mye brukt i produksjonsmiljøer
- Referanse for alle ASGI-serverimplementeringer
- Støtte for HTTP-, HTTP2- og WebSocket-protokoller
Python Trio
Trio-prosjektet har som mål å levere asynkrone I/O-funksjoner av høy kvalitet for produksjonsmiljøer: støtte for parallell I/O og samtidighet. Prosjektet har også flere web- og HTTP-biblioteker for Python.
Du kan installere den nyeste versjonen av Trio (juni 2022) fra PyPI.
$ pip install trio
Her er en liste over nyttige Trio-biblioteker for webprogrammering med Python:
- hypercorn: Hypercorn er en ASGI-server som støtter HTTP
- muffin: Muffin er et ASGI-nettverk for Python
- startlette: Starlette er et lett ASGI-rammeverk
- trio-websocket: støtte for WebSocket-server og klient
- httpx: HTTP-klient for Python
Twisted Web
Twisted er et rammeverk for Python-applikasjoner. Dette hendelsesdrevne rammeverket inkluderer en modul for webprogrammering kalt twisted.web.
Du kan installere Twisted og de tilhørende modulene med pip:
$ pip install Twisted
Her er noen av Twisteds fremtredende funksjoner:
- Utviklervennlige funksjoner som enhetstesting og statisk kodeanalyse
- twisted.web tilbyr en WSGI-server og støtte for HTTP-klienter og servere
AIOHTTP
AIOHTTP er et Python-bibliotek som tilbyr klient- og serversidefunksjonalitet gjennom klient- og server-APIer.
Her er en nyttig video som forklarer de asynkrone programmeringsmulighetene på klientsiden for å øke hastigheten på forespørsler til APIer betydelig.
Her er de fremtredende egenskapene til AIOHTTP:
- Støtte for både HTTP-server og klientfunksjonalitet
- Støtte for logging for å forenkle feilsøking; tilbyr logging for klient, server, websockets og mer
- Innebygd støtte for testing gjennom pytest-plugin for testing: pytest-aiohttp, som er tilgjengelig som en PyPI-pakke
Tornado
Tornado er et annet Python-nettverk som støtter asynkront nettverk. Det har kommet mange stabile utgivelser av Tornado de siste årene – den siste versjonen 6.2 ble utgitt i juli 2022. For øyeblikket støtter Tornado Python 3.7 og nyere.
Som de fleste pakkene på denne listen, kan Tornado også installeres med pip:
$ pip install tornado
Her er noen av Tornados fremtredende funksjoner:
- Støtte for HTTP-server tornado.httpserver og klient
- Skalerbar og benytter ikke-blokkerende nettverks I/O
- Godt egnet for applikasjoner som krever tilkobling over lengre perioder
- Verktøy for logging, enhetstesting og mer
- Sømløs integrasjon med tjenester for autentisering
Meinheld
Meinheld er en WSGI-server for Python. Den bruker og bygger på eksisterende biblioteker for hendelseshåndtering og behandling av HTTP-forespørsler.
Du kan installere Meinheld med pip:
$ pip install meinheld
Noen funksjoner i Meinheld:
- Benytter http-parser-biblioteket for å håndtere innkommende HTTP-forespørsler
- Bygger på picoev-biblioteket for hendelseshåndtering
Konklusjon
Jeg håper du fant denne oversikten over webservere for Python nyttig. Prøv gjerne disse i fremtidige prosjekter. Vi har listet opp de viktigste funksjonene. For å forstå avhengighetene og hvordan de fungerer i sin helhet, må du ta dem i bruk i applikasjonene dine. 👩🏽💻
Hvis du ønsker å forbedre dine Python-ferdigheter, bør du vurdere å se nærmere på tipsbilk.net sitt bibliotek med Python-opplæringsprogrammer. Lykke til med kodingen!