从请求中检索帖子数据的烧瓶速度很慢?

Posted

技术标签:

【中文标题】从请求中检索帖子数据的烧瓶速度很慢?【英文标题】:Flask slow at retrieving post data from request? 【发布时间】:2012-11-10 08:51:10 【问题描述】:

我正在编写接受带有 json 数据的 POST 请求的烧瓶应用程序。我注意到基于传递给应用程序的数据大小的响应时间存在巨大差异。调试后,我将问题范围缩小到从请求对象中检索 json 数据的那一行。需要注意的是,测试是在烧瓶开发服务器上完成的。

start = time.time()
resp = json.dumps(request.json)
return str(time.time() - start)

我对这条线进行了计时,对于 1024 的数据(可能不是巧合)和更少的字符,这需要 0.002 秒,而超过 1024 的任何数据都需要 1 秒! 这里发生了什么?这是开发服务器的限制吗?

编辑: 通过 request.form.get('somedata') 获取内容长度超过 1024 的 POST 数据也会发生同样的情况

编辑: 我无法用 Apache 提供的相同示例复制问题

编辑: 我开始深入研究 Werkzeug 模块,发现在从 BaseHTTPRequestHandler 传递的 wsgi.py 模块中读取响应消息 self._read(to_read) 时出现缓慢。还是不知道为什么这么慢。


这里是环境细节: Ubuntu - 10.04 蟒蛇 - 2.6.5 烧瓶 - 0.9 Werkzeug - 0.8.3

【问题讨论】:

可能相关? ***.com/questions/11150343/… barracel 这不是它。 你能用任何其他独立的 WSGI 服务器复制它吗?比如gunicorn,Tornado,...见flask.pocoo.org/docs/deploying/wsgi-standalone 马库斯,好主意。我试过 Tornado,但无法重现问题。 我在瓶中使用 BaseHTTPRequestHandler 时遇到了问题,而不是烧瓶中。但这可能是同样的问题,开发环境正在尝试将 ip 地址解析为主机名,因此它们的延迟可能是查找超时。 blog.est.im/post/34288214582也许这是一个延伸,但它可能会引导你走向正确的方向。 【参考方案1】:

如果您使用 curl 发送请求,Expect: 100-continue 可能会导致该行为。我在 uwsgi、flask 和 curl 中遇到了类似的行为。在我的情况下会发生以下情况:

如果请求正文大小大于 1024 字节,curl 会发布带有 Expect: 100-continue 标头的数据。 但是,uwsgi 无法处理标头。所以 uwsgi 没有响应 100-continue。 curl 等待 100-continue 响应,直到大约一秒超时。

When curl sends 100-continue | Georg's Log 对我了解 curl 行为很有用。

【讨论】:

【参考方案2】:

我在这样的线路上遇到了这个问题,大约需要 1.0 秒!它在烧瓶后处理程序中:

username=request.form.get('username')

我正在用 curl -F 测试它:

curl -F username="x" http://127.0.0.1:5000/func

我刚刚将 -F 更改为 -d,它得到了 0.0004 秒!!!

curl -d username="x" http://127.0.0.1:5000/func

我认为烧瓶在检索“multipart/form-data”内容类型时存在问题。

【讨论】:

【参考方案3】:

flask 开发服务器预计会很慢。来自http://flask.pocoo.org/docs/deploying/:

您可以在开发过程中使用内置服务器,但您应该为生产应用程序使用完整的部署选项。 (不要在生产中使用内置的开发服务器。)

正如 Marcus 在 cmets 中提到的那样,另一个 WSGI 服务器(如 gunicorn 或 tornado)会更快、更可靠,所以一定要使用其中一个进行部署和基准测试。

如果您担心在开发过程中快速工作,您可以在开发中使用 gunicorn,就像在部署中一样。例如,如果您要部署到 heroku,您可以运行“foreman start”,gunicorn 服务器将立即启动。

【讨论】:

以上是关于从请求中检索帖子数据的烧瓶速度很慢?的主要内容,如果未能解决你的问题,请参考以下文章

我在 Node JS 中检索 Git 标签信息的方法很慢,如何加快速度?

从数据库中检索信息的速度

SQL View 在管理控制台中速度很慢,但在 App 层中速度很快

从 google pubsub 到 spark 流的数据摄取速度很慢

perl dbi mysql 向表中插入数据速度很慢

从 Azure Block 到 CosmosDB 的 Azure 数据工厂复制速度很慢