更新时间:2021-09-16 01:26:10
Python代码
p.py
from flask import Flask, jsonify from sqlalchemy import create_engine from sqlalchemy.pool import QueuePool app = 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) def to_json(item): return { "id": item[0], "username": item[1], "email": item[2] } route("/", methods=["get"]) .def index(): data = {"msg": "", "data": []} with engine.connect() as connect: result = connect.execute("select id,username,email from user") for item in result.all(): data["data"].append(to_json(item)) return jsonify(data), 200 if __name__ == "__main__": app.run(host="0.0.0.0", port=7002)
NGINX配置
upstream backend { server 172.16.5.9:7002; } server { listen 17002; location / { proxy_pass http://backend; } }
架构图
flask直接运行,gunicon运行flask,两者是只有一个在运行,不是同时运行
运行程序
[root@izbp152ke14timzud0du15z pool]# python3 p.py * Serving Flask app 'p' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on all addresses. WARNING: This is a development server. Do not use it in a production deployment. * Running on http://172.16.5.9:7002/ (Press CTRL+C to quit)
服务端负载,CPU为4核的,资源使用率5分之1吧
样本60万请求数,tps为492/sec,p90为1303ms
通过gunicorn来运行flask应用
服务端负载,基本上已经满负载了
样本60万请求数,tps为1939/sec,p99为1114ms
在4核CPU的情况下,同环境,不同方式运行应用,tps吞吐量提示将近4倍
结论:
通过直接运行flask,多核CPU无法充分利用资源,性能低下
通过gunicorn运行flask,多核CPU可以充分利用,性能高效