簡體   English   中英

python fastapi 大 json 請求比較慢

[英]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建議添加使用orjsonujson構建響應使其速度顯着加快

代碼:

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM