实战并发测试验证gunicorn对flask的影响

简介: 实战一把gunicorn到底能不能提升性能

Python代码

p.py

fromflaskimportFlask, jsonifyfromsqlalchemyimportcreate_enginefromsqlalchemy.poolimportQueuePoolapp=Flask(__name__)
engine=create_engine(url="mysql+pymysql://root:123456@172.16.5.9:3306/demo?charset=utf8",
pool_size=20,
pool_recycle=3600*7,
poolclass=QueuePool,
echo=False)
defto_json(item):
return {
"id": item[0],
"username": item[1],
"email": item[2]
    }
@app.route("/", methods=["get"])
defindex():
data= {"msg": "", "data": []}
withengine.connect() asconnect:
result=connect.execute("select id,username,email from user")
foriteminresult.all():
data["data"].append(to_json(item))
returnjsonify(data), 200if__name__=="__main__":
app.run(host="0.0.0.0", port=7002)

NGINX配置

upstreambackend {
server 172.16.5.9:7002;
}
server {
listen 17002;
location / {
proxy_passhttp://backend;
    }
}


架构图

flask直接运行,gunicon运行flask,两者是只有一个在运行,不是同时运行



运行程序

[root@izbp152ke14timzud0du15zpool]# python3 p.py*ServingFlaskapp'p' (lazyloading)
*Environment: productionWARNING: Thisisadevelopmentserver. Donotuseitinaproductiondeployment.
UseaproductionWSGIserverinstead.
*Debugmode: off*Runningonalladdresses.
WARNING: Thisisadevelopmentserver. Donotuseitinaproductiondeployment.
*Runningonhttp://172.16.5.9:7002/ (PressCTRL+Ctoquit)


服务端负载,CPU为4核的,资源使用率5分之1吧


样本60万请求数,tps为492/sec,p90为1303ms



通过gunicorn来运行flask应用

[root@izbp152ke14timzud0du15zpool]# gunicorn -w 8 -b 172.16.5.9:7002 p:app[2021-11-0620:14:21+0800] [19426] [INFO] Startinggunicorn20.1.0[2021-11-0620:14:21+0800] [19426] [INFO] Listeningat: http://172.16.5.9:7002 (19426)
[2021-11-0620:14:21+0800] [19426] [INFO] Usingworker: sync[2021-11-0620:14:21+0800] [19429] [INFO] Bootingworkerwithpid: 19429[2021-11-0620:14:21+0800] [19449] [INFO] Bootingworkerwithpid: 19449[2021-11-0620:14:21+0800] [19486] [INFO] Bootingworkerwithpid: 19486[2021-11-0620:14:21+0800] [19504] [INFO] Bootingworkerwithpid: 19504[2021-11-0620:14:21+0800] [19507] [INFO] Bootingworkerwithpid: 19507[2021-11-0620:14:21+0800] [19508] [INFO] Bootingworkerwithpid: 19508[2021-11-0620:14:21+0800] [19509] [INFO] Bootingworkerwithpid: 19509[2021-11-0620:14:21+0800] [19511] [INFO] Bootingworkerwithpid: 19511

服务端负载,基本上已经满负载了

样本60万请求数,tps为1939/sec,p99为1114ms


在4核CPU的情况下,同环境,不同方式运行应用,tps吞吐量提示将近4倍

结论:

   通过直接运行flask,多核CPU无法充分利用资源,性能低下

   通过gunicorn运行flask,多核CPU可以充分利用,性能高效

目录
相关文章
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
11天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
26 1
|
1月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
361 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
1月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
1141 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
15天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
31 2
|
16天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
27 2
|
1月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
296 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
179 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
1月前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
152 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
395 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)