Optimierung der JSON-Datenabrufgeschwindigkeit in FastAPI
Die schleppende Rückkehr einer großen JSON-Nutzlast vom GET-Endpunkt von FastAPI ist ein wiederkehrendes Problem. Wenn json.dumps() zum Übertragen von Daten aus einer Datei mithilfe von json.loads() verwendet wird, ist die Antwort erheblich verzögert. Obwohl Rückgabedaten zum Senden von Daten an den Benutzer verwendet werden können, gibt es einen effizienteren Ansatz?
Problem:
Die Verarbeitungspipeline wandelt die Daten zunächst mithilfe von to_json von pandas in JSON um ()-Funktion, lädt sie dann mit json.loads() in ein Wörterbuch und übersetzt sie schließlich zurück in JSON. Dieser mehrstufige Konvertierungsprozess führt zu erheblicher Latenz.
Vorgeschlagene Lösung:
Zunächst ist es wichtig zu erkennen, dass FastAPI Rückgabewerte mithilfe von in JSON-kompatible Daten umwandelt jsonable_encoder, gefolgt von der Serialisierung mit der Standardfunktion json.dumps() von Python. Dieser zweistufige Prozess ist bekanntermaßen langsam.
Option 1: Alternative JSON-Encoder verwenden
Erwägen Sie die Verwendung alternativer JSON-Encoder wie orjson oder ujson. Diese Encoder übertreffen die Standardkombination aus jsonable_encoder und json.dumps().
Option 2:Direkte Rückgabe einer benutzerdefinierten Antwort
Für eine optimale Leistung verwenden Sie die benutzerdefinierte APIRoute-Klasse und geben eine Antwort zurück Objekt. Dadurch wird der standardmäßige JSON-Konvertierungsprozess von FastAPI umgangen.
<code class="python">from fastapi.routing import APIRouter, APIRoute class TimedRoute(APIRoute): ... app = FastAPI() router = APIRouter(route_class=TimedRoute) @router.get("/custom-response") def get_data(): df = pd.read_parquet('data.parquet') return Response(df.to_json(orient="records"), media_type="application/json") app.include_router(router)</code>
Zusätzliche Überlegungen:
Das obige ist der detaillierte Inhalt vonWie optimiert man die Geschwindigkeit des JSON-Datenabrufs in FastAPI?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!