使用FastAPI 和Python 請求上傳100 MB 檔案大約需要128 秒,明顯慢於使用時需要0.5秒Flask.
上傳時間的差異主要是由於FastAPI 與Flask 中處理資料的方式造成的。處理檔案上傳時,FastAPI 使用 SpooledTemporaryFile 儲存傳入請求數據,預設最大大小為 1 MB。當檔案大小超過 1 MB 時,資料將寫入磁碟上的臨時文件,導致上傳過程變慢。
1.同步檔案寫入
使用常規def關鍵字而不是async def關鍵字定義端點並同步寫入文件。
2.非同步寫入(使用aiofiles)
使用async def關鍵字定義端點,並使用aiofiles進行非同步檔案寫入。此方法需要等待檔案操作完成。
3.使用 request.stream()
使用 request.stream() 以流形式存取請求正文。此方法允許處理大塊數據,而無需將整個正文儲存在記憶體或磁碟上,從而提高上傳效能。
為了在上傳較大檔案時獲得最佳效能,請考慮使用該請求.stream() 方法。這種方法繞過了 1 MB 最大大小限制,並允許直接處理資料區塊,而無需額外的寫入/讀取操作。
以上是為什麼FastAPI的UploadFile比Flask慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!