
Pythons WSGI vs. ASGI ist wie Kuchen backen
Dieser Artikel wurde aktualisiert von Diana Pham im April 2025
Einführung
Wenn Sie jemals über den Unterschied zwischen WSGI und ASGI verwirrt waren, sind Sie nicht allein! Lassen Sie es uns anhand einer einfachen (und köstlichen) Analogie aufschlüsseln: dem Backen eines Kuchens.
Was sind WSGI und ASGI?
WSGI (Web Server Gateway Interface) und ASGI (Asynchronous Server Gateway Interface) definieren, wie ein Python-Webserver mit Webanwendungen kommuniziert. Sie sitzen zwischen dem Webserver und Ihrem Python-Framework und bearbeiten eingehende Anfragen. Sie behandeln Anfragen jedoch auf grundlegend unterschiedliche Weise.
WSGI v. ASG Iinterface
WSGI: Der traditionelle, synchrone Ansatz
WSGI verarbeitet Anfragen synchronDas bedeutet, dass jede Anfrage der Reihe nach bearbeitet wird. Die nächste Anfrage muss warten, bis die vorhergehende beendet ist, bevor sie bearbeitet werden kann.
Wenn Sie schon einmal Flaskverwendet haben, sind Sie WSGI begegnet - es ist seit Jahren der Python-Webstandard. Allerdings kann diese sequenzielle Verarbeitung die Dinge verlangsamen, insbesondere wenn viele Anfragen gleichzeitig bearbeitet werden.
ASGI: Der moderne, asynchrone Ansatz
ASGI, der Nachfolger von WSGI, führt ein asynchrone Bearbeitung von Anfragen ein. Das bedeutet, dass mehrere Anfragen gleichzeitig bearbeitet werden können, ohne aufeinander zu warten.
Vielleicht haben Sie schon von dem neuen Python-Web-Framework gehört, FastAPI. Standardmäßig verwendet es ASGI, was es blitzschnell macht. FastAPI ist auch ein Micro-Web-Framework mit vielen Vorteilen, darunter die sofortige Unterstützung für asynchronen Code mit den Python-Schlüsselwörtern async und await!
WSGI vs. ASGI: Analogie zum Backen eines Kuchens
Um den Unterschied zwischen WSGI und ASGI zu verstehen, stellen Sie sich vor, Sie bereiten eine Geburtstagsparty vor: Sie backen einen Kuchen und stellen die Glasur von Grund auf neu her. Dabei handelt es sich um zwei getrennte Aufgaben - oder im Web ausgedrückt, zwei eingehende Anfragen.
WSGI: Eine Aufgabe nach der anderen (synchrone Verarbeitung)
Bei WSGI wird jede Anfrage eine nach der anderen. Sie müssen die erste Aufgabe vollständig abschließen bevor Sie mit der nächsten Aufgabe fortfahren.
Request 1: Bake Cake
1. Mix the batter
2. Pour it into pans
3. Bake in the oven (30 min wait)
Request 2: Make Frosting
4. Mix butter and powdered sugar
5. Add vanilla and milk
6. Stir until smoothWenn das Backen also 30 Minuten dauert, müssen Sie warten, bevor Sie überhaupt anfangen können. beginnen mit dem Zuckerguss beginnen können. Dies ist eine synchrone Verarbeitung - keine Überschneidung von Aufgaben, auch wenn Sie nur warten.
Synchronous requests
ASGI:Multitasking zwischen Aufträgen (asynchrone Verarbeitung)
Mit ASGI können Sie mehrere Anfragen auf einmal bearbeiten. Wenn eine Anfrage wartet (wie der Kuchen im Ofen), können Sie umschalten und an einer anderen arbeiten.
Request 1: Bake Cake
1. Mix the batter
2. Pour it into pans
3. Put it in the oven (starts baking)
→ Switch to Request 2 while the cake bakes…
Request 2: Make Frosting
4. Mix butter and powdered sugar
5. Add vanilla and milk
6. Stir until smooth
→ Return to Request 1 once the cake is doneAnstatt untätig zu sein, nutzen Sie Ihre Zeit besser. ASGI funktioniert so, dass Tasks pausieren und wieder aufgenommen werden können, um E/A oder andere lange Operationen zu verarbeiten, ohne alles andere zu blockieren.
⚠ Hinweis: Nicht alle Aufgaben können gleichzeitig ausgeführt werden - einige hängen davon ab, dass andere zuerst erledigt werden. Sie können zum Beispiel keinen Kuchen backen, bevor Sie den Teig angerührt haben! Auch in ASGI-Applikationen können bestimmte Vorgänge (wie eine Datenbankabfrage oder das Lesen einer Datei) eine geordnete Ausführung erfordern.
Asynchronous requestsPython Pseudocode Beispiele
Synchroner Code im WSGI-Stil
def bake_cake(request):
mix_batter()
pour_into_pan()
bake_in_oven() # This blocks for a long time
return response
def make_frosting(request):
mix_ingredients()
stir_until_smooth()
return response
Hier, make_frosting() wird nicht einmal beginnen, bis bake_cake() beendet ist. Die Anfragen werden eine nach der anderen bearbeitet.
Synchroner Code im ASGI-Stil
async def bake_cake(request):
await mix_batter()
await pour_into_pan()
await bake_in_oven() # Can yield control here
return response
async def make_frosting(request):
await mix_ingredients()
await stir_until_smooth()
return response
In dieser asynchronen Version kann der Server, während bake_in_oven() wartet, kann der Server übergehen und make_frosting() statt im Leerlauf. Das ist die Stärke von ASGI - nicht blockierendes, effizientes Multitasking.
Alles einpacken
WSGI ist so, als würde man einen Kuchen backen und stillstehen, während er im Ofen ist. Mit ASGI können Sie in der Zwischenzeit den Zuckerguss zubereiten. Beide haben ihre Anwendungsfälle, aber wenn Sie skalierbare, leistungsstarke Webanwendungen die viele Aufgaben effizient bewältigen können, ist ASGI die erste Wahl.
Haben Sie eine Frage oder möchten Sie uns mitteilen, was Sie gerade bauen?
Beteiligen Sie sich am Gespräch auf dem Vonage Community Slack
Abonnieren Sie den Entwickler-Newsletter
Folgen Sie uns auf X (früher Twitter) für Updates
Sehen Sie sich die Tutorials auf unserem YouTube-Kanal
Verbinden Sie sich mit uns auf der Vonage Entwickler-Seite auf LinkedIn
Bleiben Sie auf dem Laufenden und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden.