这几天在学习怎么用 flask 搭建一个 api,现在成功搭建了,但是对系统性能的利用率让我有点不满意,每秒只能处理三个请求,但是 cpu 的利用率还没到 20%,内存占用也十分低,所以我感觉应该是单线程 /单进程的锅
我从一开始的直接 app.run 到后来的使用 gevent.pywsgi 中的 WSGIServer 再到使用 gunicorn 开启多进程和多线程,性能利用率一直不超过 30%,所以很让我纠结,特此来请教一下大佬们
screen gunicorn --threads 8 -w 3 -b 0.0.0.0:2333 flask_test:app
这是我的 gunicorn 启动代码,但是实测跟用 WSGIServer 的性能差不多。
以下是我程序的代码
@app.route('/api', methods=['POST'])
def post():
a = request.form['a']
b = request.form['b']
try:
caculate = api.Caculate(a, b)
result, time = caculate.start()
recognize_info = {'time': time, 'result': result, 'success': 1}
return jsonify(recognize_info), 200
except:
recognize_info = {'message': '计算程序出错', 'success': 0}
return jsonify(recognize_info), 200
主要花费的时间都在计算那一步,所以我在想有没有什么方法可以在 flask 的任务里使用多线程,目前我的想法是使用 queue 队列,但是不知道该如何对应返回,请大佬们讲解讲解
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.