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

Mengapa Pengendalian UploadFail FastAPI Lebih Lambat Daripada Flask?

Patricia Arquette
Lepaskan: 2024-11-08 11:18:02
asal
1069 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan