python - Flask request.form.get 太慢?

标签 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)

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

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

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

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

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

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

所以我的设置:
Alpine 3.8.1
unicorn :
worker :3
线程:1

当我调用它时,引擎盖下会发生什么?
request.form.get('requestDescription')

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

任何帮助将不胜感激

最佳答案

我也遇到过这个问题。我正在使用 request.post() 上传视频文件.事实证明,视频上传不是问题。
计时瓶颈是 request.form.get() .虽然我仍在努力找出问题所在,但您可以使用 Flask Monitoring Dashboard对代码进行时间分析
原来,引擎盖下是 return self._sock.recv_into(b)如果您使用探查器

关于python - Flask request.form.get 太慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53448608/

相关文章:

python - Django 中 Jinja 的标签 'raw' 抛出错误 - 'Did you forget to register or load this tag?'

python - 为什么设置一个元素值会更改 Python 二维矩阵中其他元素的值

flask - 在 Jinja 模板中渲染 WTForms CheckboxInput

python-2.7 - Gunicorn 500'ing 在 POST 到 Flask 应用程序上

django - 在 Nginx 后面调试 Django/Gunicorn

python - 当我将模型实例保存到 MongoDB 数据库中时,为什么 Python 会引发异常?

Python:平衡回归分析的数据集(重新排列数据集并填充空白类别)

python - Waitress 和 Gunicorn 大数据输入比 Flask 开发服务器慢很多

python - flask : TypeError: 'str' object is not callable while validation using Flask-WTF

django - 在同一个 python 进程上运行多个站点