Heim >Backend-Entwicklung >Python-Tutorial >Wie optimiert man die Geschwindigkeit des JSON-Datenabrufs in FastAPI?

Wie optimiert man die Geschwindigkeit des JSON-Datenabrufs in FastAPI?

DDD
DDDOriginal
2024-10-18 22:58:30626Durchsuche

How to Optimize JSON Data Retrieval Speed in FastAPI?

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:

  • Streaming-Antworten: Erwägen Sie bei der Verarbeitung die Verwendung von Stream-Antworten Außergewöhnlich große Datensätze können zu Problemen mit nicht genügend Arbeitsspeicher führen.
  • Dask-Bibliothek: Nutzen Sie Dask, um große Datenmengen effizient zu verarbeiten. Konvertieren Sie den resultierenden Dask-DataFrame in einen Pandas-DataFrame, bevor Sie .to_json() verwenden.
  • Dateidownload: Legen Sie den Content-Disposition-Header fest, um anzugeben, dass die Antwort unter Umgehung als Datei heruntergeladen werden soll Verzögerungen beim Browser-Rendering.

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!

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