Python Webserver im Überblick: Eine detaillierte Betrachtung
In der folgenden Übersicht präsentieren wir eine Auswahl von Python-Webservern, die Sie für die Bereitstellung Ihrer Python-Anwendungen nutzen können. Diese Server sind essentielle Komponenten in der Entwicklung und dem Deployment von Webanwendungen.
Wir beginnen mit einer Erläuterung, wie Webserver im Allgemeinen arbeiten und warum Server-Gateway-Schnittstellen von Bedeutung sind. Anschließend werden wir detailliert auf die verschiedenen Python-Webserver und ihre Besonderheiten eingehen. Die meisten dieser Server sind als PyPI-Pakete erhältlich, was die Integration in Ihre Projekte vereinfacht.
Legen wir los!
Was ist ein Webserver?
Bei der Entwicklung einer Python-Anwendung setzen Sie üblicherweise einen Entwicklungsserver ein, um Ihre Anwendung zu testen. Sobald die Entwicklung abgeschlossen ist, muss Ihre App jedoch auf einem Produktionsserver bereitgestellt werden. Ein solcher Webserver sollte, neben zusätzlicher Funktionalität, mindestens die Grundfunktionalität eines HTTP-Servers mitbringen.
Ein Python-Webserver muss in der Lage sein, HTTP-Anfragen (wie GET, PUT und POST) von Clients, beispielsweise Webbrowsern, zu empfangen und die entsprechende Antwort zurückzusenden. Diese Antwort kann einen HTTP-Statuscode enthalten, der darüber informiert, ob die Anfrage erfolgreich bearbeitet wurde oder nicht. Zudem kann die Antwort aus HTML-Seiten oder semistrukturierten Daten wie JSON oder XML bestehen.
ASGI vs. WSGI: Das Zusammenspiel von Server-Gateway-Schnittstellen
Nehmen wir an, Sie haben eine Python-Anwendung mit einem Framework Ihrer Wahl, wie Django oder Flask, entwickelt. Ein konventioneller Server wäre nicht ohne weiteres in der Lage, die an die Python-Anwendung gerichteten Anfragen zu verstehen und zu bearbeiten. Hier kommen Server-Gateway-Schnittstellen ins Spiel.
Diese Gateway-Schnittstellen können als Web Server Gateway Interface (WSGI) oder Asynchronous Server Gateway Interface (ASGI) implementiert sein. Der Webserver nimmt eine Anfrage vom Client entgegen und leitet sie dann an die entsprechende Server-Gateway-Schnittstelle weiter. Diese Schnittstelle (WSGI/ASGI) kommuniziert dann über ein sogenanntes „Callable“ mit der Python-Anwendung.
Das Web Server Gateway Interface (WSGI) bearbeitet Anfragen sequenziell. Dies bedeutet, dass bei mehreren langsamen HTTP-Anfragen der Durchsatz beeinträchtigt werden kann.
Im Gegensatz dazu ist das Asynchronous Server Gateway Interface (ASGI) ein Nachfolger von WSGI, der in der Lage ist, Anfragen asynchron zu bearbeiten.
Stellen Sie sich vor, eine laufende Anfrage erfordert einen Datenbanklesevorgang, der möglicherweise einige Zeit in Anspruch nimmt. Während die erste Anfrage auf eine Antwort wartet, kann ASGI bereits eine zweite eingehende Anfrage verarbeiten.
Im Gegensatz dazu muss bei WSGI die erste Anfrage vollständig abgearbeitet sein, bevor die zweite Anfrage bearbeitet werden kann. Die Verwendung von ASGI kann daher zu einem höheren Durchsatz führen. Zudem erlaubt ASGI die Verwendung asynchroner Python-Funktionen in Ihrer Anwendung.
Python-Webserver im Detail
Im Folgenden werden verschiedene Webserver vorgestellt, die Sie für Ihre Python-Anwendungen verwenden können. Wir haben auch einige Frameworks berücksichtigt, die bereits eine integrierte Unterstützung für produktionsreife Server bieten. Diese Liste ist nicht vollständig, und die Reihenfolge der Server ist willkürlich.
Uvicorn
Wenn Sie bereits Erfahrungen mit der Anwendungsentwicklung mit FastAPI gesammelt haben, sind Sie sicherlich auf Uvicorn gestoßen. Uvicorn ist eine ASGI-Serverimplementierung für Python.
Uvicorn und die zugehörigen Abhängigkeiten können einfach mit dem folgenden Befehl über pip installiert werden:
$ pip install uvicorn[standard] # beinhaltet die Installation optionaler und Cython-basierter Abhängigkeiten
Die wichtigsten Merkmale von Uvicorn sind:
- ASGI-Implementierung
- Unterstützung für die Ausführung von Apps in einer asynchronen Python-Umgebung
- Ein Kommandozeilenwerkzeug mit vielfältigen Optionen
- Unterstützung für die Ausführung von Anwendungen aus Factory-Funktionen
- Bereitstellung von Funktionen zur programmgesteuerten Steuerung von Serverinstanzen
Gunicorn
Gunicorn ist ein WSGI-Server für Python-Anwendungen, der für sein fortschrittliches Prozessmanagement bekannt ist.
Uvicorn bietet eine Gunicorn-Worker-Klasse, die es ermöglicht, die Vorteile von Leistung und Prozessmanagement gleichzeitig zu nutzen. Auf dieser Dokumentationsseite finden Sie weitere Informationen zum Deployment von Gunicorn.
Wenn Sie Python 3.5 oder höher verwenden, können Sie Gunicorn mit dem folgenden pip-Befehl installieren:
$ pip install gunicorn
Die wichtigsten Merkmale von Gunicorn sind:
- Einfach und schnell
- Kompatibel mit vielen Web-Frameworks
- Unterstützung für die Verwendung mit einem HTTP-Proxy-Server
- Erweitertes Prozessmanagement
CherryPy
CherryPy ist ein Python-Webframework – ähnlich wie Django, Flask und FastAPI –, jedoch nicht ganz so populär wie die genannten. CherryPy existiert seit über einem Jahrzehnt, hat zahlreiche stabile Releases hervorgebracht und sich zu einem vollwertigen Framework entwickelt. Zudem steht eine aktive Entwickler-Community hinter dem Projekt.
Das Zen von CherryPy vermittelt die Essenz, dass CherryPy ein einfaches, minimalistisches, aber dennoch leistungsstarkes Framework ist.
CherryPy ist ein Python-Framework und kein eigenständiger Webserver, wird aber hier aufgeführt, da es einen Server in Produktionsqualität nativ unterstützt – im Gegensatz zu den meisten anderen Frameworks.
Verwenden Sie den folgenden Befehl, um CherryPy zu installieren und loszulegen:
$ pip install CherryPy
Die wichtigsten Merkmale von CherryPy sind:
- Pythonisches Framework mit objektorientiertem Python; gut geeignet für Anfänger
- Unterstützung für einen produktionsreifen HTTP-Server, Cheroot
- Einfacher zu erlernen als andere Web-Frameworks wie Django
- Unterstützung für die Entwicklung und Bereitstellung einfacher Web-Apps für Microservices
Daphne
Django ist eines der bekanntesten Python-Webframeworks. Wenn Sie Anwendungen mit Django entwickelt haben, haben Sie wahrscheinlich den Daphne-Webserver verwendet. Daphne ist eine der ersten ASGI-Serverimplementierungen und dient als Referenz für andere ASGI-Serverimplementierungen.
Daphne ist als PyPI-Paket verfügbar und kann einfach mit pip installiert werden.
$ pip install daphne
Hier finden Sie ein umfassendes Tutorial, das Sie durch die Entwicklung einer produktionsreifen Full-Stack-Python-Anwendung führt.
Die wichtigsten Merkmale von Daphne sind:
- Weit verbreitet in Produktionsumgebungen
- Dient als Referenz für alle ASGI-Serverimplementierungen
- Unterstützung für HTTP-, HTTP2- und WebSocket-Protokolle
Python-Trio
Das Trio-Projekt hat das Ziel, asynchrone I/O-Fähigkeiten in Produktionsqualität bereitzustellen, darunter Unterstützung für parallele I/O und Parallelität. Dieses Projekt umfasst auch diverse Web- und HTTP-Python-Bibliotheken.
Die aktuelle Version von Trio (Stand Juni 2022) können Sie über PyPI installieren:
$ pip install trio
Hier ist eine Liste nützlicher Trio-Bibliotheken für die Webprogrammierung mit Python:
- hypercorn: Ein ASGI-Server mit HTTP-Unterstützung
- muffin: Ein ASGI-Webframework für Python
- startlette: Ein leichtgewichtiges ASGI-Framework
- trio-websocket: Unterstützung für WebSocket-Server und -Clients
- httpx: Ein HTTP-Client für Python
Twisted Web
Twisted ist ein Framework für Python-Anwendungen. Dieses ereignisgesteuerte Framework beinhaltet ein Modul für die Webprogrammierung namens twisted.web.
Sie können Twisted und die zugehörigen Module mit dem folgenden pip-Befehl installieren:
$ pip install Twisted
Die wichtigsten Merkmale von Twisted sind:
- Entwicklerfreundliche Funktionen wie Unit-Tests und statische Codeanalyse
- twisted.web bietet einen WSGI-Server sowie Unterstützung für HTTP-Clients und -Server
AIOHTTP
AIOHTTP ist eine Python-Bibliothek, die client- und serverseitige Funktionen über die Client- und Server-APIs bereitstellt.
Hier ist ein hilfreiches Video, das die asynchronen Programmiermöglichkeiten auf der Clientseite erläutert, um Anfragen an APIs deutlich zu beschleunigen.
Die wichtigsten Merkmale von AIOHTTP sind:
- Unterstützung sowohl für HTTP-Server- als auch Client-Funktionalität
- Unterstützung für Protokollierung zur einfacheren Fehlerbehebung; bietet Protokollierung für Clients, Server, WebSockets und mehr
- Native Unterstützung für Tests mit dem pytest-Plugin: pytest-aiohttp, das als PyPI-Paket erhältlich ist
Tornado
Tornado ist ein weiteres Python-Webframework, das asynchrone Netzwerke unterstützt. In den letzten Jahren sind viele stabile Versionen von Tornado erschienen – die aktuellste Version 6.2 wurde im Juli 2022 veröffentlicht. Tornado unterstützt derzeit Python 3.7 und höher.
Wie die meisten Pakete in dieser Liste kann auch Tornado mit pip installiert werden:
$ pip install tornado
Die wichtigsten Merkmale von Tornado sind:
- Unterstützung für den HTTP-Server tornado.tserver und Client
- Skalierbar und nutzt nicht-blockierende Netzwerk-I/O
- Gut geeignet für Anwendungen, die eine Verbindung über einen längeren Zeitraum aufrechterhalten müssen
- Hilfsmittel für Protokollierung, Unit-Tests und mehr
- Nahtlose Integration mit Diensten zur Authentifizierung
Meinheld
Meinheld ist ein WSGI-Server für Python. Es verwendet und erweitert bestehende Bibliotheken für die Ereignisbehandlung und HTTP-Anforderungsverarbeitung.
Meinheld kann einfach mit pip installiert werden:
$ pip install meinheld
Einige der Funktionen von Meinheld:
- Verwendet die http-parser-Bibliothek zur Verarbeitung eingehender HTTP-Anfragen
- Baut auf der Picoev-Bibliothek für die Ereignisbehandlung auf
Fazit
Wir hoffen, diese Übersicht über Python-Webserver war für Sie hilfreich. Probieren Sie diese Server in Ihren zukünftigen Projekten aus. Wir haben die wichtigsten Merkmale aufgeführt; um die Abhängigkeiten und ihre Arbeitsweise vollständig zu verstehen, ist es jedoch wichtig, sie in Ihren Anwendungen einzusetzen. 👩🏽💻
Wenn Sie Ihre Python-Kenntnisse erweitern möchten, empfehlen wir Ihnen, sich die wdzwdz-Bibliothek mit Python-Tutorials anzusehen. Viel Spaß beim Programmieren!