„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum ist UploadFile von FastAPI manchmal langsamer als Flask?

Warum ist UploadFile von FastAPI manchmal langsamer als Flask?

Veröffentlicht am 09.11.2024
Durchsuche:720

Why is FastAPI's UploadFile Sometimes Slower Than Flask?

FastAPI UploadFile-Leistung im Vergleich zu Flask

UploadFile-Leistung in FastAPI kann aufgrund von Unterschieden in der Datenverarbeitung langsamer sein als in Flask. UploadFile von FastAPI verwendet asynchrone Methoden, die bei nicht effizienter Handhabung zu Engpässen führen können, während Flask synchrone Methoden verwendet.

Hier erfahren Sie, warum UploadFile von FastAPI langsamer sein kann:

  • Blockierende E/A: Standardmäßig verwenden die UploadFile-Methoden von FastAPI blockierende E/A-Vorgänge, die den Hauptthread behindern und die API verlangsamen können.
  • Daten-Chunking: Starlette (das zugrunde liegende Framework für FastAPI) verwendet eine SpooledTemporaryFile mit einer standardmäßigen max_size von 1 MB. Sobald die Daten diese Größe überschreiten, werden sie in eine temporäre Datei auf der Festplatte geschrieben, wodurch ein weiterer I/O-Overhead entsteht.

Best Practices für effiziente Datei-Uploads in FastAPI:

Asynchrones Dateischreiben mit aiofiles

Verwenden Sie asynchrones Dateischreiben mit der aiofiles-Bibliothek, um Dateien auf nicht blockierende Weise zu schreiben. Dieser Ansatz verbessert die Leistung, insbesondere bei großen Dateien.

Lesen der Datei in Blöcken

Erwägen Sie, die Datei in Blöcken einer bestimmten Größe zu lesen, um zu vermeiden, dass die gesamte Datei in den Speicher geladen wird. Dies verhindert Speicherprobleme und verbessert die Leistung beim Hochladen großer Dateien.

Verwenden von run_in_threadpool()

Um das Blockieren des Hauptthreads zu vermeiden, verwenden Sie die run_in_threadpool()-Funktion von FastAPI, um blockierende E/A-Vorgänge in einem auszuführen separater Thread. Dadurch wird die nicht blockierende Ausführung dateibezogener Aufgaben sichergestellt.

Direkter Zugriff auf den Anforderungstext als Stream

In Fällen, in denen die Dateispeicherung auf dem Server nicht erforderlich ist, greifen Sie direkt als Stream auf den Anforderungstext zu streamen mit request.stream(). Diese Methode ermöglicht eine effiziente Dateiverwaltung, ohne dass unnötiger E/A-Overhead entsteht.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3