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