9 Python-webservere at prøve til dit næste projekt

I denne liste præsenterer vi adskillige Python-webservere, du kan bruge til at implementere dine Python-applikationer.

Vi starter med at forstå, hvordan webservere fungerer, og behovet for server-gateway-grænseflader. Derefter vil vi gennemgå listen over Python-webservere sammen med deres fremtrædende funktioner. De fleste af dem er tilgængelige som PyPI-pakker, som du kan installere og begynde at bruge i dine projekter.

Lad os begynde!

Hvad er en webserver?

Når du udvikler en Python-applikation, skal du bruge udviklingsserveren til at teste din app. Men når udviklingen er færdig, bliver du nødt til at implementere din app på en server i produktionskvalitet. Blandt flere lag af tilføjet funktionalitet oveni, bør en webserver have den grundlæggende funktionalitet som en HTTP-server.

Python-webserveren bør være i stand til at håndtere HTTP-anmodninger (simple HTTP-anmodninger som GET, PUT og POST) fra klienter, såsom webbrowsere, og returnere svaret. Dette svar kan indeholde HTTP-statuskoden, der angiver, om anmodningen blev behandlet med succes eller ej. Det kan bestå af HTML-websider og semi-strukturerede data såsom JSON, XML og mere.

ASGI vs. WSGI: Forstå Server Gateway Interfaces

Antag, at du har udviklet en Python-applikation i en ramme efter eget valg, f.eks. Django eller Flask. En konventionel server kan være ude af stand til at forstå og behandle de anmodninger, der er rettet til Python-applikationen. Det er her server-gateway-grænseflader kommer i spil.

Denne gateway-grænseflade kan være en Web Server Gateway Interface (WSGI) eller en Asynchronous Server Gateway Interface (ASGI). Webserveren modtager en anmodning fra en klient, som den derefter omdirigerer til server-gateway-grænsefladen. Interfacet (WSGI/ASGI) interagerer med Python-applikationen gennem en synlig callable.

Web Server Gateway Interface (WSGI) håndterer anmodninger sekventielt. Hvis der er flere langsomme HTTP-anmodninger, vil de påvirke gennemløbet.

Asynchronous Server Gateway Interface, eller ASGI, er en efterfølger til WSGI og har den yderligere evne til at håndtere anmodninger asynkront.

  5 måder at fremskynde Ubuntu

Antag at en aktuelt serviceret anmodning kræver en databaselæsning (der potentielt kan tage lang tid) og venter på svaret. Når den første anmodning venter på et svar, kan ASGI håndtere en anden indkommende anmodning.

Dette er i modsætning til WSGI, hvor den første anmodning skal behandles for den anden anmodning. Derfor kan brug af ASGI resultere i øget gennemløb. ASGI lader dig også bruge asynkrone Python-funktioner i din applikation.

Python webservere

List nu de webservere, du kan bruge til dine Python-applikationer. Vi har også inkluderet visse rammer, der giver out-of-the-box support til produktionsklare servere. Dette er ikke en udtømmende liste, og webserveranbefalingerne nedenfor er ikke i nogen bestemt rækkefølge.

Uvicorn

Hvis du er fortrolig med applikationsudvikling med FastAPI, er du stødt på Uvicorn, en webserverimplementering. Uvicorn er en ASGI-serverimplementering til Python.

For at installere Uvicorn og tilhørende afhængigheder ved hjælp af pip skal du køre følgende kommando:

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

Følgende er Uvicorns fremtrædende træk:

  • ASGI implementering
  • Understøttelse af kørsel af apps fra et asynkront Python-miljø
  • Kommandolinjeværktøjet med en omfattende liste over muligheder
  • Understøtter kørsel af applikationer fra fabriksfunktioner
  • Giver funktioner til at styre serverforekomster programmatisk

Gunicorn

Gunicorn er en WSGI-server til Python-applikationer, kendt for sine avancerede processtyringsfunktioner.

Uvicorn giver en Gunicorn-arbejderklasse, der giver dig mulighed for at opnå præstations- og processtyringsfordele på samme tid. Denne dokumentationsside indeholder detaljer om implementering af Gunicorn.

Hvis du har Python 3.5 og nyere, kan du installere Gunicorn ved hjælp af pip:

$ pip install gunicorn

Følgende er Gunicorns fremtrædende træk:

  • Enkelt og hurtigt
  • Kompatibel med mange web-frameworks
  • Understøttelse til brug med en HTTP-proxyserver
  • Avanceret processtyring

CherryPy

CherryPy er en Python-webramme – ligesom Django, Flask og FastAPI – men ikke så populær som disse rammer. Med flere stabile udgivelser har CherryPy eksisteret og har udviklet sig til et fuldt udbygget framework i over et årti. Det har også et understøttende udviklerfællesskab.

  Sådan forhindrer du Strava i at gøre din hjemmeadresse offentlig

Du kan tjekke den interessante Zen of CherryPy, som formidler essensen af, at CherryPy er en enkel og minimalistisk, men alligevel kraftfuld ramme.

CherryPy er et Python-framework og ikke en webserver, men det er på vores liste, da det naturligt understøtter en produktionskvalitetsserver – i modsætning til de fleste andre frameworks.

For at installere CherryPy og komme i gang skal du køre:

$ pip install CherryPy

Følgende er CherryPys iøjnefaldende træk:

  • Pythonic framework ved hjælp af objektorienteret Python; velegnet til begyndere
  • Understøttelse af en produktionsklar HTTP-server, Cheroot
  • Lettere at lære end andre web-frameworks, såsom Django
  • Support til opbygning og implementering af simple webapps til mikrotjenester

Daphne

Django er en af ​​de mest populære Python-webrammer. Hvis du har udviklet applikationer med Django, har du sandsynligvis brugt Daphne-webserveren. Daphne er en af ​​de første ASGI-serverimplementeringer, der bruges som reference til ASGI-serverimplementeringer.

Daphne er tilgængelig som en PyPI-pakke, som du kan installere ved hjælp af pip.

$ pip install daphne

Her er en detaljeret tutorial, der vil guide dig gennem opbygningen af ​​en fuld-stack produktionsklar Python-applikation.

Følgende er Daphnes iøjnefaldende træk:

  • Udbredt i produktionsmiljøer
  • Reference for alle ASGI-serverimplementeringer
  • Understøttelse af HTTP-, HTTP2- og WebSocket-protokoller

Python Trio

Trio-projektet har til formål at levere asynkrone I/O-funktioner i produktionskvalitet: understøttelse af parallel I/O og samtidighed. Dette projekt har også flere web- og HTTP Python-biblioteker.

Du kan installere den seneste udgivelse af Trio (juni 2022) fra PyPI.

$ pip install trio

Her er en liste over nyttige Trio-biblioteker til webprogrammering med Python:

  • hypercorn: Hypercorn er en ASGI-server, der understøtter HTTP
  • muffin: Muffin er en ASGI-webramme for Python
  • startlette: Starlette er en letvægts ASGI-ramme
  • trio-websocket: understøttelse af WebSocket server og klient
  • httpx: HTTP-klient til Python

Twisted Web

Twisted er en ramme til Python-applikationer. Denne begivenhedsdrevne ramme inkluderer et modul til webprogrammering kaldet twisted.web.

  Hvordan fungerer foldbare telefoner, og hvornår får jeg en?

Du kan installere Twisted og de tilhørende moduler ved hjælp af pip:

$ pip install Twisted

Følgende er Twisteds iøjnefaldende træk:

  • Udviklervenlige funktioner såsom enhedstest og statisk kodekontrol
  • twisted.web giver en WSGI-server og understøttelse af HTTP-klienter og -servere

AIOHTTP

AIOHTTP er et Python-bibliotek, der giver klient- og server-side-funktioner gennem klient- og server-API’erne.

Her er en nyttig video, der forklarer de asynkrone programmeringsfunktioner på klientsiden for at fremskynde anmodninger til API’er betydeligt.

Følgende er de fremtrædende træk ved AIOHTTP:

  • Understøttelse af både HTTP-server og klientfunktionalitet
  • Understøttelse af logning for at lette lettere debugging; giver logning til en klient, server, web-sockets og mere
  • Native support til test gennem pytest Plugin til test: pytest-aiohttp, som er tilgængelig som en PyPI-pakke

Tornado

Tornado er en anden Python-webramme, der understøtter asynkront netværk. I de senere år har der været mange stabile udgivelser af Tornado – den seneste version 6.2 blev udgivet i juli 2022. I øjeblikket understøtter Tornado Python 3.7 og senere.

Som de fleste pakker på denne liste kan Tornado også installeres ved hjælp af pip:

$ pip install tornado

Følgende er Tornados iøjnefaldende træk:

  • Understøttelse af HTTP-server tornado.httpserver og klient
  • Skalerbar og bruger ikke-blokerende netværk I/O
  • Velegnet til applikationer, der kræver tilslutning i et væsentligt længere tidsinterval
  • Hjælpeprogrammer til logning, enhedstest og mere
  • Problemfri integration med tjenester til godkendelse

Meinheld

Meinheld er en WSGI-server til Python. Det bruger og bygger eksisterende biblioteker til hændelseshåndtering og HTTP-anmodningsbehandling.

Du kan installere Meinheld ved hjælp af pip:

$ pip install meinheld

Nogle funktioner i Meinheld:

  • Bruger http-parser-bibliotek til at håndtere indgående HTTP-anmodninger
  • Bygger oven på picoev-biblioteket til håndtering af begivenheder

Konklusion

Jeg håber, du fandt denne liste over Python-webservere nyttig. Sørg for at prøve dem i dine fremtidige projekter. Vi har listet de vigtigste funktioner; for fuldt ud at forstå afhængighederne og hvordan de fungerer, skal du bruge dem i dine applikationer. 👩🏽‍💻

Hvis du vil opgradere dine Python-færdigheder, kan du overveje at tjekke toadmin.dk’ bibliotek af Python-tutorials ud. God kodning!