Flask request.form.get 太慢?

Dmi*_*uev 5 python cprofile flask gunicorn 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)
Run Code Online (Sandbox Code Playgroud)

在这里我发现 start_time 和 end_time 之间的延迟可以达到 2 分钟。

我读过有关使用 Flask 的 Werkzeug 作为生产服务器的信息,因此我尝试将 Gunicorn 作为替代方案 - 同样的事情。

我觉得我的问题有点类似于这个,不同的是另一台服务器没有解决问题。

我尝试使用cProfileSnakeViz分析应用程序,但使用非生产 Werkzeug 服务器 - 因为我不知道如何分析在 Gunicorn 上运行的 python 应用程序。(也许这里有人知道怎么做?)

我的 POST 请求包含描述和文件。该文件的大小可能会有所不同,但日志显示无论文件大小如何,问题都会重现

人们通常也说Flask应该用在Nginx-[普通服务器]-flask组合中,但我使用Openshift内部的服务,我怀疑这是否有意义。(HaProxy 作为平衡器工作)

所以我的设置:Alpine 3.8.1 Gunicorn:workers:3 线程:1

当我调用它时,引擎盖下会发生什么?

request.form.get('requestDescription')
Run Code Online (Sandbox Code Playgroud)

如何在 Gunicorn 下分析 Python 代码?有没有其他人遇到过这样的问题?

任何帮助将不胜感激

小智 0

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

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

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