我正在为我的公司维护API服务器,该服务器在 nginx 顶部的 uwsgi 中运行python flask 应用。
...
@app.route('/getquick', methods=["GET"])
def GET_GET_IP_DATA():
sp_final = "CALL sp_quick()"
cursor.execute(sp_final)
@app.route('/get_massive_log', methods=["POST"])
def get_massive_log():
sp_final = "CALL sp_slow()"
cursor.execute(sp_final)
...
第一个请求 / getquick 得到非常快速的处理时, / get_massive_log 可能会花费长达五秒钟的时间,这是由于冗长而复杂的mySQL查询。服务器可以处理这些查询中的几个,但是在调用太多查询时,会开始创建损坏的管道错误。
问题是,其他/ getquick请求被这些长I / O请求阻塞了。
我的经理建议我使用 gevent 来释放服务器,以便在等待mySQL查询时处理其他请求,但是我不确定自己的方向是否正确。< / p>
我正在使用 pymysql 来运行查询,谷歌似乎建议在uwsgi上使用 gevent 进行查询,但是我无法通过以下方式产生更好的结果它。
我已经在Google上搜索了几天,而当我试图了解线程,并发性,异步请求时,我不知道从哪里开始寻找解决方案。可能吗我们将不胜感激任何建议或什至指示在哪里进行研究。
编辑:也许我的问题不太清楚,所以我将尝试重述:
在等待使用uwsgi进行长数据库查询时释放工作人员的空闲空间的最佳方法是什么?
答案 0 :(得分:0)
您需要了解Uwsgi offloading
卸载是一种优化微小任务的方法,可以将它们委派给一个或多个 更多线程。
这些线程以非阻塞/事件方式运行此类任务,从而允许 大量并发。
您可以在docs
中了解有关卸载子系统的信息。