2012-11-22 4 views
23

私は、JSONデータでPOST要求を受け付けるフラスコアプリケーションを作成しています。私はアプリケーションに渡されるデータサイズに基づいて、応答時間に大きな違いがあることに気づいた。デバッグ後、リクエストオブジェクトからjsonデータを取得していた行に問題を絞り込んだ。テストはフラスコ開発サーバーで行ったことに注意することが重要です。リクエストからポストデータを取得する際にフラスコが遅い?

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

私は、これは1秒以上1024上0.002sと何のために取った、このラインをタイミング1024のデータのための(おそらく偶然)と小さい文字! ここに何が起こっていますか?これは開発サーバーの制限ですか?

EDIT: 同じことはEDIT

1024を介してコンテンツな長さでrequest.form.get( 'someDataが')を通じてPOSTデータを取得するために起こる:私は、Apacheが提供する同じ例で問題を再現できなかった

EDIT: 私はWERKZEUGモジュールに掘り始め、BaseHTTPRequestHandlerではから渡されwsgi.pyモジュールに応答メッセージself._read(to_read)を読むとき遅さが発生することがわかりました。まだなぜそんなに遅いのかわかりません。


ここでは環境の詳細です: Ubuntuの - 10.04 パイソン - 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サーバーと複製できますか?ガンコーン、トルネードなど... 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 

は、私はちょうど-dする-Fを変更し、それが0.0004秒を得ました!

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

フラスコには、「multipart/form-data」コンテンツタイプを取得するのに問題があると思います。

関連する問題