簡體   English   中英

FastAPI 性能比 Flask 差

[英]FastAPI performs worse than Flask

以前我使用 Flask 結合 Gunicorn 在 Redhat OpenShift 中開發和部署 API。 多個來源聲稱 FastAPI 更快,所以我想我會在 Flask 和 FastAPI 中制作兩個簡單的 API,以便能夠比較它們。

Flask寫的代碼是:

from flask import Flask, request, json, Response, send_file

app = Flask(__name__)


def find_sums_single():
    def cpu_bound(number):
        return sum(i * i for i in range(number))
  
    numbers = [5_000_000 + x for x in range(5)]
    for number in numbers:
        cpu_bound(number)


@app.route("/loadtest/", methods=['GET'])
def loadtest():
    find_sums_single()
    return {"Message:": "Succesfully performed loadtest"}

並開始於:

PORT=${1:-5757}
gunicorn --preload --timeout=60 -b '0.0.0.0:'+$PORT --workers=1 wsgi:app

用FastAPI編寫的代碼是:

from fastapi import Request, FastAPI, status

app = FastAPI(debug=False)

def find_sums_single():
    def cpu_bound(number):
        return sum(i * i for i in range(number))
  
    numbers = [5_000_000 + x for x in range(5)]
    for number in numbers:
        cpu_bound(number)
        
  
@app.get("/loadtest/", status_code=200)
def loadtest():
    find_sums_single()
    return {"message": "Succesfully performed loadtest"}

並開始於:

uvicorn api:app --host 0.0.0.0 --port 5757

或者

gunicorn api:app --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:5757

我總是使用一個 worker,因為我喜歡讓 OpenShift 來處理放大/縮小。

使用 Lokust(時間為 2 分鍾)我得到以下結果:

Lokust 結果

在這里,FastAPI 看起來並不快。 我做錯什么了嗎?

嗯......你正在做的主要是CPU綁定的工作。

Web 應用程序通常會更受 I/O 限制,然后在其他地方計算 CPU 限制工作。

也就是說,基准沒有錯。 說基於 CPU 密集型工作的 Web 框架比另一個慢,這只是一種誤解。

請注意,您可以增加uvicorn運行安裝uvloophttptools的時間。

免責聲明:我是uvicorn維護者。

應該在 fastapi 中的路由 def 之前有一個異步以利用異步請求,這是 fastapi 在生產中更快的主要原因之一(但僅當同時發出多個請求時)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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