優化FastAPI 中的JSON 資料檢索速度
從FastAPI 的GET 端點返回相當大的JSON 負載的速度緩慢是一個反覆出現的問題。當使用 json.dumps() 透過 json.loads() 從檔案傳輸資料時,回應會大幅延遲。雖然返回數據可用於向用戶發送數據,但有沒有更有效的方法?
問題:
處理管道最初使用pandas 的to_json 將資料轉換為JSON () 函數,然後使用json.loads() 將其載入到字典中,最後將其轉換回JSON。這種多步驟轉換過程會帶來相當大的延遲。
建議的解決方案:
首先,認識到FastAPI 使用以下方法將回傳值轉換為JSON 相容的資料至關重要: jsonable_encoder,然後使用標準Python的json.dumps() 函數進行序列化。眾所周知,這個兩步驟過程很慢。
選項 1:利用替代 JSON 編碼器
考慮使用替代 JSON 編碼器,例如 orjson 或 ujson。這些編碼器的效能優於預設的 jsonable_encoder 和 json.dumps() 組合。
選項 2:直接傳回自訂回應
為了獲得最佳效能,請使用自訂 APIRoute 類別並傳回回應目的。這會繞過 FastAPI 的預設 JSON 轉換過程。
<code class="python">from fastapi.routing import APIRouter, APIRoute class TimedRoute(APIRoute): ... app = FastAPI() router = APIRouter(route_class=TimedRoute) @router.get("/custom-response") def get_data(): df = pd.read_parquet('data.parquet') return Response(df.to_json(orient="records"), media_type="application/json") app.include_router(router)</code>
其他注意事項:
以上是如何優化FastAPI中的JSON資料檢索速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!