Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pengendalian UploadFail FastAPI Lebih Lambat Daripada Flask?

Mengapa Pengendalian UploadFail FastAPI Lebih Lambat Daripada Flask?

Patricia Arquette
Patricia Arquetteasal
2024-11-08 11:18:02950semak imbas

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

Isu Prestasi Fail Muat Naik FastAPI Berbanding dengan Kelalang

Pengendalian Fail Muat Naik FastAPI boleh menjadi lebih perlahan daripada Pengendalian Fail disebabkan perbezaan dalam pengendalian fail. Flask menggunakan penulisan fail segerak, manakala kaedah UploadFile FastAPI adalah tak segerak dan menggunakan penimbal dengan saiz lalai 1 MB.

Penyelesaian Prestasi Yang Dipertingkat

Untuk meningkatkan prestasi, laksanakan menulis fail secara tidak segerak dengan aiofiles perpustakaan:

<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>

Nota Tambahan

  • Pendekatan ini menyimpan keseluruhan fail dalam ingatan, yang mungkin tidak sesuai untuk fail besar.
  • Untuk muat naik fail potongan, pertimbangkan untuk menggunakan kaedah await file.read() dengan penimbal yang lebih kecil saiz.
  • Secara bergantian, anda boleh menggunakan shutil.copyfileobj() dengan run_in_threadpool() untuk melaksanakan operasi menyekat dalam urutan berasingan, memastikan urutan utama kekal responsif.

Penyelesaian Penstriman

Untuk prestasi yang lebih baik, pertimbangkan untuk mengakses kandungan permintaan sebagai strim tanpa menyimpan seluruh badan dalam ingatan atau direktori sementara:

<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>

Atas ialah kandungan terperinci Mengapa Pengendalian UploadFail FastAPI Lebih Lambat Daripada Flask?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn