我将Flask用于我的Web Api服务。
发现我的服务有时(1/100个请求)响应速度非常慢(几秒钟),因此我开始进行调试,这表明有时服务在读取请求字段时挂起。
@app.route('/scan', methods=['POST'])
def scan():
start_time = time.time()
request_description = request.form.get('requestDescription')
end_time = time.time()
app.logger.debug('delay is ' + end_time-start_time)
在这里,我发现开始时间和结束时间之间的延迟可能长达2分钟。
我已经读过有关将Flask的Werkzeug用作生产服务器的信息,所以我尝试了GUnicorn作为替代方案-
我觉得我的问题在某种程度上类似于this one,区别在于另一台服务器无法解决问题。
我尝试使用 cProfile 和 SnakeViz 对应用程序进行配置,但是使用非Prod Werkzeug服务器-因为我不了解如何对运行于python应用程序的配置文件进行配置独角兽(也许这里有人知道怎么做?)
我的POST请求包含描述和文件。该文件的大小可能会有所不同,但是日志显示问题会重现,而与文件大小无关。
人们通常还会说Flask应该在Nginx- [普通服务器] -flask组合中使用,但是当我在Openshift中使用该服务时,我怀疑这是否有意义。 (HaProxy充当平衡器)
所以我的设置: 高山3.8.1 GUnicorn: 工人数:3 线程:1
当我这样称呼它的时候会发生什么?
request.form.get('requestDescription')
如何在GUnicorn下分析Python代码? 还有其他人遇到这样的问题吗?
任何帮助将不胜感激
答案 0 :(得分:0)
我也遇到过这个问题。我正在使用 request.post()
上传视频文件。事实证明,视频上传不是问题。
计时瓶颈是 request.form.get()
。虽然我仍在尝试找出问题,但您可以使用 Flask Monitoring Dashboard 对代码进行时间分析
事实证明,如果您使用分析器,引擎盖下是 return self._sock.recv_into(b)