【问题标题】:Flask request.form.get too slow?烧瓶 request.form.get 太慢了?
【发布时间】:2019-04-26 04:18:29
【问题描述】:

我将 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)

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

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

我觉得我的问题和this one有点相似,不同的是另一台服务器没有解决问题。

我尝试使用 cProfileSnakeViz 来分析应用程序,但使用非产品 Werkzeug 服务器 - 因为我不知道如何分析运行在G独角兽。 (也许这里有人知道怎么做?)

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

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

所以我的设置: 高山 3.8.1 G独角兽: 工人:3 线程:1

当我调用它时,底层会发生什么?

request.form.get('requestDescription')

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

任何帮助将不胜感激

【问题讨论】:

    标签: python flask gunicorn cprofile snakeviz


    【解决方案1】:

    我也遇到过这个问题。我正在使用request.post() 上传视频文件。原来视频上传不是问题。

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

    如果您使用分析器,结果是 return self._sock.recv_into(b)

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2014-06-07
      • 2016-05-31
      • 2011-07-07
      • 2015-08-23
      相关资源
      最近更新 更多