https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-pythons-wsgi-vs-asgi-is-like-baking-a-cake/flask-vs-fastapi_2.png

Pythons WSGI vs. ASGI ist wie Kuchen backen

Zuletzt aktualisiert am November 16, 2021

Lesedauer: 3 Minuten

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.

Visual of the flow of the interface being used with a laptop at the start and an arrow pointing to a web server pointing to a WSGI or ASGI to a web applicationWSGI 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 smooth

Wenn 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.

Three horizontal bars labeled A, B, and C, arranged diagonally downward from left to right. Bar A is magenta and positioned at the top left. Bar B is light blue and placed slightly lower and to the right of A. Bar C is orange, the longest of the three, located at the bottom right. Each bar has its corresponding label above it in magenta text.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 done

Anstatt 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.

Three horizontal bars labeled A, B, and C, stacked vertically. Bar A is magenta and the longest, starting furthest to the left. Bar B is light blue and shorter, positioned slightly to the right of A. Bar C is orange and wider than B, starting further right than both A and B. Each bar has its label (A, B, C) above or beside it in magenta text.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?

Bleiben Sie auf dem Laufenden und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden.

Teilen Sie:

https://a.storyblok.com/f/270183/400x401/df70d85a84/tonya-sims-1.png
Tonya SimsVonage Ehemalige

Tonya ist eine ehemalige Python Developer Advocate bei Vonage.