首頁 > 軟體

Python flask與fastapi效能測試方法介紹

2022-12-11 14:01:39

背景

sy專案通過MQ接受業務系統的業務資料,通過執行開發者開發的python指令碼執行業務系統與財務系統資料的一致性校驗。

sy系統需要每天執行大量的python指令碼。目前使用falsk日執行6W+次python指令碼,由於效能存在瓶頸,需要引入

新的fastapi框架,來解決cpu、記憶體效能壓榨不夠及目前的效能瓶頸。本文目標給出兩者的效能測試報告。

給出選擇哪個框架的效能資料支撐。

apache ab介紹

apache ab效能測試

安裝

    yum -y install httpd-tools

部分引數說明

-n  執行的請求總數

-c 並行數, 同時執行的數量, c不能大於n
-p post請求指定的檔案
-T header Content-type值,預設為 'text/plain'

測試get請求

ab -c 10  http://127.0.0.1:8081/cppla

測試post請求

ab -n 100 -c 10 -T 'application/json' -p httpjson.txt  http://127.0.0.1:8081/cppla1  

// httpjson.txt的內容
{"recordId": 123}

測試計劃

模擬真實每次請求呼叫指令碼,分別對每一個數量級的請求量進行測試。

請求總數每次並行數每次並行數每次並行數
100101001000
1000101001000
10000101001000
20000101001000
30000101001000
40000101001000
50000101001000
60000101001000
80000101001000

測試程式碼

處理post請求,延時3s返回結果。flask啟動20個程序。fastapi啟動一個程序。

## flask 程式碼
# coding: utf-8
from gevent import monkey
from gevent.pywsgi import WSGIServer
import requests
import datetime
import os
from multiprocessing import cpu_count, Process
from flask import Flask, jsonify,request
import json
import traceback
import importlib
from loguru import logger
import time
app = Flask(__name__)
# 執行run方法
@app.route("/cppla1", methods=['POST', 'GET'])
def cppla1():
    data = request.json
    time.sleep(3)
    return data
# 啟動監聽ip、埠
def run(MULTI_PROCESS):
    if MULTI_PROCESS == False:
        WSGIServer(('0.0.0.0', 8081), app).serve_forever()
    else:
        mulserver = WSGIServer(('0.0.0.0', 8081), app)
        mulserver.start()
        def server_forever():
            mulserver.start_accepting()
            mulserver._stop_event.wait()
       # for i in range(cpu_count()):
        for i in range(20):
            logger.info('啟動程序第幾個:{}', i)
            p = Process(target=server_forever)
            p.start()
if __name__ == "__main__":
    # 單程序 + 協程
    # run(False)
    # 多程序 + 協程
    log_init()
    run(True)
## fastapi
# coding: utf-8
# import web framework
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
# import base lib
import datetime
import os
import requests
import json
import traceback
import importlib
from loguru import logger
import time
app = FastAPI()
@app.post("/cppla1")
def function_benchmark(data:dict):
    time.sleep(3)
    return {"item": data}
# 啟動監聽ip、埠
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8081)

測試結果

框架型別請求總數每次並行數耗時(s)每次並行數耗時(s)每次並行數耗時(s)
fastapi1001033.11910012.1481000ab命令不支援
flask1001045.08810081.1061000ab命令不支援
fastapi100010304.05710078.283100078.631
flask100010327.472100198.2731000303.442
fastapi1000010x100754.2961000757.719
flask1000010x1001550.11910001970.427
fastapi2000010x100x1000x
flask2000010x100x1000x
fastapi3000010x100x1000x
flask3000010x100x1000x
fastapi4000010x100x1000x
flask4000010x100x1000x
fastapi5000010x100x1000x
flask5000010x100x1000x
fastapi6000010x100x1000x
flask6000010x100x1000x
fastapi8000010x100x1000x
flask8000010x100x1000x

結論

fastapi是flask效能的3倍,推薦使用fastap。

到此這篇關於Python flask與fastapi效能測試方法介紹的文章就介紹到這了,更多相關flask與fastapi效能測試內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com