Gleichzeitige vs. parallele Anfragen in FastAPI
In FastAPI gibt es ein weit verbreitetes Missverständnis darüber, warum asynchrone Verteidigungsendpunkte nicht immer Anfragen ausführen parallel. Dieses Verhalten wird nicht durch das Design von FastAPI verursacht, sondern hängt vielmehr damit zusammen, wie FastAPI asynchrone Programmierung nutzt.
Bei Verwendung von Def-Endpunkten führt FastAPI diese synchron in separaten Threads aus und ermöglicht so Parallelität. Asynchrone Def-Endpunkte werden jedoch normalerweise direkt in der Ereignisschleife ausgeführt und stellen so sowohl Parallelität als auch Parallelität sicher, wenn der Code mit asynchronen E/A-Vorgängen interagiert.
Synchronischer vs. asynchroner Code in FastAPI
FastAPI unterstützt asynchronen Code durch async def, wodurch die Kontrolle mithilfe von „await“ zurück an die Ereignisschleife übergeben werden kann. Diese Funktion ermöglicht nicht blockierende Vorgänge, z. B. das Warten auf Daten von einem Client oder eine Datenbankantwort. Wenn jedoch eine synchrone Aufgabe wie time.sleep() innerhalb eines asynchronen Def-Endpunkts eingesetzt wird, blockiert sie die Ereignisschleife und letztlich den Server, was zu einer sequentiellen Verarbeitung von Anfragen führt.
Externer Threadpool
Um sicherzustellen, dass blockierende Aufgaben die Ereignisschleife nicht behindern, verwendet FastAPI einen externen Threadpool, der mit def definierte Aufgaben in separaten Threads ausführt und wartet sie, bevor die Ausführung der Ereignisschleife fortgesetzt wird. Dieser Ansatz erreicht Parallelität für Def-Endpunkte, auch wenn es sich nicht um echte Parallelisierung handelt.
Best Practices
Das obige ist der detaillierte Inhalt vonGleichzeitig vs. parallel: Wie verarbeitet FastAPI Anfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!