2012-11-22 40 views
23

我正在写容器应用程序,它接受带有json数据的POST请求。基于传递给应用程序的数据大小,我注意到响应时间的巨大差异。调试后,我将问题缩小到了我从请求对象中检索json数据的那一行。注意到在烧瓶开发服务器上进行测试可能很重要。烧瓶在从请求中检索发布数据时速度慢?

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

我计时这条线和1024的数据(可能不是巧合)和更少的字符这场耗时0.002s和任何超过1024超过1秒! 这里发生了什么?这是开发服务器的限制吗?

编辑: 同样的事情发生,通过request.form.get在1024获得POST数据(“somedata”)与内容lenght

编辑: 我不能与阿帕奇

担任同样的例子复制的问题

编辑: 我开始挖掘Werkzeug模块,发现在从BaseHTTPRequestHandler传递的wsgi.py模块中读取响应消息self._read(to_read)时发生缓慢。仍然不知道为什么这么慢。


这里的环境细节: 的Ubuntu - 10.04 的Python - 2.6.5 瓶 - 0.9 WERKZEUG - 0.8.3

+0

可能有相关? http://stackoverflow.com/questions/11150343/slow-requests-on-local-flask-server – barracel

+0

barracel这不是它。 –

+3

您是否可以将其与任何其他独立WSGI服务器一起复制?如gunicorn,龙卷风,...见http://flask.pocoo.org/docs/deploying/wsgi-standalone/ –

回答

4

烧瓶开发服务器预计将是缓慢的。从http://flask.pocoo.org/docs/deploying/

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

马库斯在评论中提到的,像gunicorn或龙卷风另一个WSGI服务器会更快,更可靠,所以肯定使用其中的一个用于部署和标杆。

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

2

我在这样的一条线上有这个问题,它花费了大约1.0秒!这是在一个烧瓶后处理:

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

我用卷曲-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”内容类型有问题。