FastAPI führt API-Aufrufe seriell statt parallel aus
F: Warum werden FastAPI-API-Aufrufe seriell statt parallel ausgeführt?
A: Laut FastAPI-Dokumentation, wenn def anstelle von async def verwendet wird, um a zu definieren Bei der Pfadoperationsfunktion wird sie in einem externen Thread-Pool ausgeführt, auf den dann gewartet wird, statt direkt aufgerufen zu werden. Dies geschieht, um eine Blockierung des Servers zu verhindern.
Zusätzliche Überlegungen zur parallelen Ausführung:
asynchrone Def- vs. Def-Endpunkte:
-
async def: Funktionen werden direkt in der Ereignisschleife ausgeführt; werden gleichzeitig verarbeitet, solange sie auf nicht blockierende E/A-gebundene Vorgänge warten.
-
def: Funktionen werden in einem separaten Thread aus einem externen Thread-Pool ausgeführt; wird seriell verarbeitet, es sei denn, es wird außerhalb der Ereignisschleife ausgeführt.
Verwenden von Blockierungsvorgängen:
Wenn ein asynchroner Def-Endpunkt einen Blockierungsvorgang enthält und nicht wartet Nach Abschluss wird die Ereignisschleife blockiert und Anforderungen werden verarbeitet seriell.
Lösungen:
- Definieren Sie den Endpunkt mit normaler Definition anstelle von asynchroner Definition (wenn keine erwartbaren Vorgänge vorhanden sind).
- Verwenden Sie die Funktion run_in_threadpool() von FastAPI, um Blockierungsaufgaben separat auszuführen Thread.
- Verwenden Sie asyncios loop.run_in_executor() oder asyncio.to_thread(), um blockierende Aufgaben in einem separaten Executor oder Thread auszuführen.
Andere Optimierungsstrategien:
- Verwenden Sie mehr Worker, um die Vorteile von Multicore zu nutzen CPUs.
- Erwägen Sie die Verwendung von Celery oder AsyncIOScheduler für umfangreiche Hintergrundberechnungen.
Das obige ist der detaillierte Inhalt vonWarum führt FastAPI API-Aufrufe seriell statt parallel aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn