我正在编写烧瓶应用程序,该应用程序接受带有json数据的POST请求。我注意到根据传递给应用程序的数据大小,响应时间存在巨大差异。调试后,我将问题缩小到从请求对象检索json数据的那一行。可能需要注意的是,测试是在flask开发服务器上完成的。
start = time.time()
resp = json.dumps(request.json)
return str(time.time() - start)
我为这行计时,对于1024个数据(可能不是巧合)和更少的字符,这花费了0.002s,并且对于超过1024秒的任何内容都花费了1秒!这是怎么回事这是开发服务器的限制吗?
编辑:通过request.form.get('somedata')获取内容长度超过1024的POST数据也会发生同样的事情
编辑:我无法使用Apache提供的相同示例来复制问题
编辑:我开始深入研究Werkzeug模块,发现在读取从BaseHTTPRequestHandler传递的wsgi.py模块中的响应消息self._read(to_read)
时,速度变慢。仍然不知道为什么这么慢。
这里的环境详细信息:Ubuntu的-10.04Python-2.6.5烧瓶-0.9Werkzeug-0.8.3
烧瓶开发服务器预计会变慢。从http://flask.pocoo.org/docs/deploying/:
您可以在开发过程中使用内置服务器,但是应该对生产应用程序使用完整的部署选项。 (请勿在生产中使用内置的开发服务器。)
[正如Marcus在评论中提到的那样,像gunicorn或龙卷风这样的WSGI服务器将更快,更可靠,因此绝对可以使用其中之一进行部署和基准测试。
[如果您担心在开发过程中会很快工作,则可以像在部署中一样在开发中使用gunicorn。例如,如果要部署到heroku,则可以运行“ foreman start”,并且gunicorn服务器将立即启动。
我在这样的线上遇到了这个问题,大约需要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
我认为烧瓶在检索“多部分/表单数据”内容类型时遇到问题。
如果使用curl发送请求,则Expect: 100-continue
可能会导致此行为。我在uwsgi,长颈瓶和卷发中遇到了类似的行为。我的情况如下:
When curl sends 100-continue | Georg's Log对我了解卷曲行为很有用。