2012-11-22 42 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」內容類型有問題。