[英]python fastapi large json request are relativly slow
我有一個簡單的服務,它獲取 json 並返回 json,這些 json 相對較大 ~200Kb-~300Kb。 現在我注意到,即使我不對 json 進行任何處理,整個往返行程仍然需要大約 30-40 毫秒(即使是在我自己的機器上)。
這是我的代碼:
from typing import Dict
from fastapi import FastAPI
app = FastAPI(title="My test")
@app.post("/large_json_test")
async def foo(request: dict) -> dict:
something = request.get("something") or "NA"
x = "whatever" + something
return {"request": request, "x": x}
運行以下 bash 時:
time curl -XPOST "127.0.0.1:8080/large_json_test" -d @large.json -H "Content-Type: application/json" 1> /dev/null
返回以下結果:
0.00s user 0.00s system 15% cpu 0.043 total
總時間也可以在0.050左右!
關於如何使它更快的任何建議?
值得一提的是,當運行一個小的 json 請求時,它將花費 10 毫秒,這意味着讀取序列化和寫回 json 大約需要 30 - 40 毫秒。
因此,正如luk2302建議添加使用orjson
或ujson
構建響應使其速度顯着加快
代碼:
@app.post("/large_json_test1")
async def foo1(request: dict) -> Response:
something = request.get("something") or "NA"
x = "whatever" + something
res = {"request": request, "x": x}
return Response(
content=ujson.dumps(res)
)
@app.post("/large_json_test2")
async def foo2(request: dict) -> Response:
something = request.get("something") or "NA"
x = "whatever" + something
res = {"request": request, "x": x}
return Response(
content=orjson.dumps(res)
)
結果:
ujson
curl -XPOST "127.0.0.1:8080/large_json_test1" -d @large.json -H > 0.00s user 0.00s system 43% cpu 0.014 total
orjson
curl -XPOST "127.0.0.1:8080/large_json_test2" -d @example_session.json -H > 0.00s user 0.00s system 41% cpu 0.016 total
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.