Python flask与fastapi性能测试方法介绍

2022-12-10 57阅读 0评论

?=背景

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}

测试计划

拟真实每次请求调用脚本,分别对每一个数量级的请求量进行测试。

请求总数每次并发数每次并发数每次并发数100101001000100010100100010000101001000200001010010003000010100100040000101001000500001010010006000010100100080000101001000

测试代码

处理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.631flask100010327.472100198.2731000303.442fastapi1000010x100754.2961000757.719flask1000010x1001550.11910001970.427fastapi2000010x100x1000xflask2000010x100x1000xfastapi3000010x100x1000xflask3000010x100x1000xfastapi4000010x100x1000xflask4000010x100x1000xfastapi5000010x100x1000xflask5000010x100x1000xfastapi6000010x100x1000xflask6000010x100x1000xfastapi8000010x100x1000xflask8000010x100x1000x

结论

fastapi是flask性能的3倍,推荐使用fastap。

到此这篇关于Python flask与fastapi性能测试方法介绍的文章就介绍到这了,更多相关flask与fastapi性能测试内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,57人围观)

还没有评论,来说两句吧...