从请求中检索帖子数据的烧瓶速度很慢?
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 中遇到了类似的行为。在我的情况下会发生以下情况:
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 层中速度很快