Pythonflask与fastapi性能测试方法介绍

Tanisha ·
更新时间:2024-11-10
· 466 次阅读

目录

背景

apache ab介绍

测试计划

测试代码

测试结果

结论

背景

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性能测试内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



测试方法 方法 测试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章