9 Python-webservere du kan prøve for ditt neste prosjekt

I denne listen presenterer vi flere Python-webservere du kan bruke til å distribuere Python-applikasjonene dine.

Vi starter med å forstå hvordan webservere fungerer og behovet for servergateway-grensesnitt. Deretter vil vi gå over listen over Python-nettservere sammen med deres fremtredende funksjoner. De fleste av dem er tilgjengelige som PyPI-pakker som du kan installere og begynne å bruke i prosjektene dine.

La oss begynne!

Hva er en webserver?

Når du utvikler en Python-applikasjon, bruker du utviklingsserveren til å teste appen din. Når utviklingen er fullført, må du imidlertid distribuere appen din på en server i produksjonsgrad. Blant flere lag med ekstra funksjonalitet på toppen, bør en webserver ha den grunnleggende funksjonaliteten til en HTTP-server.

Python-nettserveren skal kunne håndtere HTTP-forespørsler (enkle HTTP-forespørsler som GET, PUT og POST) fra klienter, for eksempel nettlesere, og returnere svaret. Dette svaret kan inkludere HTTP-statuskoden som indikerer om forespørselen ble behandlet vellykket eller ikke. Det kan bestå av HTML-nettsider og semistrukturerte data som JSON, XML og mer.

ASGI vs. WSGI: Forstå Server Gateway-grensesnitt

Anta at du har utviklet en Python-applikasjon i et rammeverk du velger, for eksempel Django eller Flask. En konvensjonell server kan være ute av stand til å forstå og behandle forespørslene som er rettet til Python-applikasjonen. Her er hvor server gateway-grensesnitt kommer inn i bildet.

Dette gateway-grensesnittet kan være et Web Server Gateway Interface (WSGI) eller et Asynchronous Server Gateway Interface (ASGI). Nettserveren mottar en forespørsel fra en klient, som den deretter omdirigerer til serverens gateway-grensesnitt. Grensesnittet (WSGI/ASGI) samhandler med Python-applikasjonen gjennom en synlig anropbar.

Web Server Gateway Interface (WSGI) håndterer forespørsler sekvensielt. Hvis det er flere sakte HTTP-forespørsler, vil de påvirke gjennomstrømningen.

Asynchronous Server Gateway Interface, eller ASGI, er en etterfølger til WSGI og har den ekstra muligheten til å håndtere forespørsler asynkront.

  Hvordan lage og bruke Memoji og Animoji på en iPhone

Anta at en for øyeblikket betjent forespørsel krever en databaselesing (som potensielt kan ta lang tid) og venter på svaret. Når den første forespørselen venter på svar, kan ASGI håndtere en andre innkommende forespørsel.

Dette i motsetning til WSGI, hvor den første forespørselen må behandles for den andre forespørselen. Derfor kan bruk av ASGI resultere i økt gjennomstrømning. ASGI lar deg også bruke asynkrone Python-funksjoner i applikasjonen din.

Python webservere

List nå opp webserverne du kan bruke for Python-applikasjonene dine. Vi har også inkludert visse rammeverk som gir direkte støtte for produksjonsklare servere. Dette er ikke en uttømmende liste, og webserveranbefalingene nedenfor er ikke i noen spesiell rekkefølge.

Uvicorn

Hvis du er kjent med applikasjonsutvikling med FastAPI, har du kommet over Uvicorn, en nettserverimplementering. Uvicorn er en ASGI-serverimplementering for Python.

For å installere Uvicorn og tilhørende avhengigheter ved hjelp av pip, kjør følgende kommando:

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

Følgende er Uvicorns fremtredende trekk:

  • ASGI implementering
  • Støtte for å kjøre apper fra et asynkront Python-miljø
  • Kommandolinjeverktøyet med en omfattende liste over alternativer
  • Støtter kjøring av applikasjoner fra fabrikkfunksjoner
  • Gir funksjoner for å kontrollere serverforekomster programmatisk

Gunicorn

Gunicorn er en WSGI-server for Python-applikasjoner, kjent for sine avanserte prosessadministrasjonsfunksjoner.

Uvicorn gir en Gunicorn-arbeiderklasse, slik at du kan oppnå ytelses- og prosessledelsesfordeler samtidig. Denne dokumentasjonssiden inneholder detaljer om distribusjon av Gunicorn.

Hvis du har Python 3.5 og nyere, kan du installere Gunicorn ved å bruke pip:

$ pip install gunicorn

Følgende er Gunicorns fremtredende trekk:

  • Enkelt og raskt
  • Kompatibel med mange nettrammeverk
  • Støtte for bruk med en HTTP-proxy-server
  • Avansert prosessledelse

CherryPy

CherryPy er et Python-nettrammeverk – akkurat som Django, Flask og FastAPI – men ikke så populært som disse rammeverkene. Med flere stabile utgivelser har CherryPy eksistert og har utviklet seg til et fullverdig rammeverk i over et tiår. Den har også et støttende utviklerfellesskap.

  Topp 10 alternativer for Kodi Fusion Repository

Du kan sjekke ut den interessante Zen of CherryPy, som formidler 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 på listen vår ettersom det naturlig støtter en server i produksjonsgrad – i motsetning til de fleste andre rammeverk.

For å installere CherryPy og komme i gang, kjør:

$ pip install CherryPy

Følgende er CherryPys fremtredende funksjoner:

  • Pythonisk rammeverk ved hjelp av objektorientert Python; godt egnet for nybegynnere
  • Støtte for en produksjonsklar HTTP-server, Cheroot
  • Lettere å lære enn andre nettrammeverk, for eksempel Django
  • Støtte for å bygge og distribuere enkle nettapper til mikrotjenester

Daphne

Django er et av de mest populære Python-nettrammene. Hvis du har utviklet applikasjoner med Django, har du sannsynligvis brukt Daphne-nettserveren. Daphne er en av de første ASGI-serverimplementeringene som brukes som referanse for ASGI-serverimplementeringer.

Daphne er tilgjengelig som en PyPI-pakke som du kan installere ved hjelp av pip.

$ pip install daphne

Her er en detaljert opplæring som vil lede deg gjennom å bygge en fullstack produksjonsklar Python-applikasjon.

Følgende er Daphnes fremtredende trekk:

  • 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 å gi produksjonskvalitet asynkrone I/O-funksjoner: støtte for parallell I/O og samtidighet. Dette prosjektet har også flere web- og HTTP Python-biblioteker.

Du kan installere den siste 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.

  3 smarte måter å endre Netflix faktureringsdato

Du kan installere Twisted og de tilhørende modulene ved å bruke pip:

$ pip install Twisted

Følgende er Twisteds fremtredende trekk:

  • Utviklervennlige funksjoner som enhetstesting og statisk kodekontroll
  • twisted.web tilbyr en WSGI-server og støtte for HTTP-klienter og servere

AIOHTTP

AIOHTTP er et Python-bibliotek som gir klient- og serversidefunksjoner gjennom klient- og server-API-ene.

Her er en nyttig video som forklarer de asynkrone programmeringsmulighetene på klientsiden for å øke hastigheten på forespørsler til APIer betydelig.

Følgende er de fremtredende egenskapene til AIOHTTP:

  • Støtte for både HTTP-serveren og klientfunksjonaliteten
  • Støtte for logging for å lette enklere feilsøking; gir logging for en klient, server, web-sockets 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. De siste årene har det vært mange stabile utgivelser av Tornado – den siste versjonen 6.2 ble utgitt i juli 2022. Foreløpig støtter Tornado Python 3.7 og senere.

Som de fleste pakker i denne listen, kan Tornado også installeres ved hjelp av pip:

$ pip install tornado

Følgende er Tornados fremtredende trekk:

  • Støtte for HTTP-server tornado.httpserver og klient
  • Skalerbar og bruker ikke-blokkerende nettverks I/O
  • Godt egnet for applikasjoner som krever tilkobling for et vesentlig lengre tidsintervall
  • 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 eksisterende biblioteker for hendelseshåndtering og HTTP-forespørselsbehandling.

Du kan installere Meinheld ved å bruke pip:

$ pip install meinheld

Noen funksjoner i Meinheld:

  • Bruker http-parser-bibliotek for å håndtere innkommende HTTP-forespørsler
  • Bygger på toppen av picoev-biblioteket for hendelseshåndtering

Konklusjon

Jeg håper du syntes denne listen over Python-nettservere var nyttig. Sørg for å prøve dem ut i fremtidige prosjekter. Vi har listet opp nøkkelfunksjonene; for å forstå avhengighetene og hvordan de fungerer fullt ut, må du bruke dem i applikasjonene dine. 👩🏽‍💻

Hvis du vil øke Python-ferdighetene dine, bør du vurdere å sjekke ut tipsbilk.net sitt bibliotek med Python-opplæringsprogrammer. Lykke til med koding!