烧瓶request.form.get太慢了?

时间:2018-11-23 14:34:58

标签: python flask gunicorn cprofile snakeviz

我将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代码? 还有其他人遇到这样的问题吗?

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。我正在使用 request.post() 上传视频文件。事实证明,视频上传不是问题。

计时瓶颈是 request.form.get()。虽然我仍在尝试找出问题,但您可以使用 Flask Monitoring Dashboard 对代码进行时间分析

事实证明,如果您使用分析器,引擎盖下是 return self._sock.recv_into(b)