9 Python-Webserver, die Sie für Ihr nächstes Projekt ausprobieren sollten

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!