Flask高并发方案性能调查
方案
使用flask + gevent + multiprocess + wsgi
# coding: utf-8
# code by https://cpp.la, 2020-04-20
# flask + gevent + multiprocess + wsgi
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
import datetime
import os
from multiprocessing import cpu_count, Process
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/cppla", methods=['GET'])
def function_benchmark():
return jsonify(
{
"status": "ok",
"time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M'),
"pid": os.getpid()
}
), 200
def run(MULTI_PROCESS):
if MULTI_PROCESS == False:
WSGIServer(('0.0.0.0', 8080), 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()):
p = Process(target=server_forever)
p.start()
if __name__ == "__main__":
# 单进程 + 协程
# run(False)
# 多进程 + 协程
run(True)
直接部署
from gevent import monkey
monkey.patch_all()
import datetime
import os
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/cppla", methods=['GET'])
def function_benchmark():
return jsonify(
{
"status": "ok",
"time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M'),
"pid": os.getpid()
}
), 200
def run():
app.run(debug=True, host='0.0.0.0', port=8080)
if __name__ == "__main__":
run()
Locust压测结果
服务器环境:
腾讯云轻量应用服务器(北京),带宽5Mbps,Ubuntu 20.04.6 LTS
CPU: 64位,物理1核(1 X 1),逻辑1核,AMD EPYC ,一级缓存32K
内存:内存:1987 Mb,交换分区:0 Mb
100000用户每秒增加100进行压测,压测数据如下。
直接部署(当前LangChain部署方式)
单进程+协程
多进程协程
测试服务器负载图表
单进程+协程: 2023/11/1 18:06:36 - 2023/11/1 18:36:25
直接部署: 2023/11/1 19:14:13 - 2023/11/1 19:39:45
多进程+协程: 2023/11/1 19:50:33 - 2023/11/1 20:18:26
结论
多进程+协程 > 直接部署 > 单进程+协程
评论 (0)