Heim >Backend-Entwicklung >Python-Tutorial >Warum ist die UploadFile-Verarbeitung von FastAPI langsamer als die von Flask?

Warum ist die UploadFile-Verarbeitung von FastAPI langsamer als die von Flask?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 11:18:021036Durchsuche

Why is FastAPI's UploadFile Handling Slower Than Flask's?

FastAPI UploadFile-Leistungsprobleme im Vergleich zu Flask

Die UploadFile-Verarbeitung von FastAPI kann aufgrund von Unterschieden in der Dateiverarbeitung langsamer sein als die von Flask. Flask verwendet synchrones Dateischreiben, während die UploadFile-Methoden von FastAPI asynchron sind und einen Puffer mit einer Standardgröße von 1 MB verwenden.

Verbesserte Leistungslösung

Um die Leistung zu verbessern, implementieren Sie Datei asynchron mit der aiofiles-Bibliothek schreiben:

<code class="python">from fastapi import File, UploadFile
import aiofiles

@app.post("/upload")
async def upload_async(file: UploadFile = File(...)):
    try:
        contents = await file.read()
        async with aiofiles.open(file.filename, 'wb') as f:
            await f.write(contents)
    except Exception:
        return {"message": "There was an error uploading the file"}
    finally:
        await file.close()

    return {"message": f"Successfully uploaded {file.filename}"}</code>

Zusätzliche Hinweise

  • Dieser Ansatz behält die gesamte Datei im Speicher, was für große Dateien möglicherweise nicht ideal ist Dateien.
  • Für das Hochladen von Dateien in Blöcken sollten Sie die Verwendung der Methode „await file.read()“ mit einer kleineren Puffergröße in Betracht ziehen.
  • Alternativ können Sie „shutil.copyfileobj()“ mit „run_in_threadpool()“ verwenden Führen Sie Blockierungsvorgänge in einem separaten Thread durch und stellen Sie sicher, dass der Hauptthread reaktionsfähig bleibt.

Streaming-Lösung

Für eine noch bessere Leistung sollten Sie den Zugriff auf den Anforderungstext als in Betracht ziehen ein Stream, ohne den gesamten Körper im Speicher oder in einem temporären Verzeichnis zu speichern:

<code class="python">from fastapi import Request
import aiofiles

@app.post("/upload")
async def upload_stream(request: Request):
    try:
        filename = request.headers['filename']
        async with aiofiles.open(filename, 'wb') as f:
            async for chunk in request.stream():
                await f.write(chunk)
    except Exception:
        return {"message": "There was an error uploading the file"}

    return {"message": f"Successfully uploaded {filename}"}</code>

Das obige ist der detaillierte Inhalt vonWarum ist die UploadFile-Verarbeitung von FastAPI langsamer als die von Flask?. 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