2012-11-22 15 views
23

Json verileriyle POST isteklerini kabul eden bir flask uygulaması yazıyorum. Uygulamaya geçirilen veri boyutuna göre yanıt zamanında büyük farklar fark ettim. Hata ayıkladıktan sonra, konuyu istek nesnesinden json verilerini aldığım sıraya daraltdım. Testin flask geliştirme sunucusu üzerinde yapıldığını not etmek önemli olabilir.Flask, istek sonrası posta verilerini almakta yavaş mı?

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

bu çizgiyi aşımına ve 1024 verilerine (muhtemelen tesadüf) ve daha az karakter bu 1 saniye boyunca 1024 üzerinden herhangi bir şey için 0.002s aldı ve! Burada neler oluyor? Bu gelişme sunucusunun sınırlaması mı?

DÜZENLEME: Aynı şey 1024 üzerinden içerik uzunluğunda request.form.get yoluyla ('someData') POST verilerini almak için olur

DÜZENLEME: Ben Apache

tarafından sunulan aynı örnekle konuyu çoğaltamadı

DÜZENLEME: Werkzeug modülüne kazmaya başladım ve BaseHTTPRequestHandler öğesinden geçirilen wsgi.py modülündeki yanıt iletisi self._read(to_read) okunduğunda yavaşlığın oluştuğunu tespit ettim. Hala neden bu kadar yavaş olduğunu bilmiyorum.


İşte çevre ayrıntıları: Ubuntu - 10,04 Python - 2.6.5 Flask - 0.9 Werkzeug - 0.8.3

+0

İlişkili olabilir? http://stackoverflow.com/questions/11150343/slow-requests-on-local-flask-server – barracel

+0

barracel bu değil. –

+3

Bunu başka bir bağımsız WSGI sunucusuyla çoğaltabilir misiniz?Gunncorn, Tornado gibi ... http://flask.pocoo.org/docs/deploying/wsgi-standalone/ –

cevap

4

şişesi geliştirme sunucusu yavaş olması bekleniyor. http://flask.pocoo.org/docs/deploying/'dan:

Geliştirme sırasında yerleşik sunucuyu kullanabilirsiniz, ancak üretim uygulamaları için tam bir dağıtım seçeneği kullanmalısınız. (Üretimde yerleşik geliştirme sunucusu kullanmayın.)

Marcus yorumlarda belirtildiği gibi, gunicorn veya kasırga gibi başka WSGI sunucu yüzden kesinlikle dağıtım ve karşılaştırma için bunlardan birini kullanmak çok daha hızlı ve daha güvenilir olacağını .

Geliştirme sırasında hızlı bir şekilde çalışmayla ilgili endişeleriniz varsa, tıpkı tıpkı dağıtımda olduğu gibi, geliştirmede de guncorn'i kullanabilirsiniz. Örneğin, heroku için konuşlandırıyorsanız, "foreman start" komutunu çalıştırabilir ve gunicorn sunucusu baştan başlayacaktır.

2

Bu problemi böyle bir satırda yapmıştım, yaklaşık 1.0 saniye sürüyordu!

username=request.form.get('username') 
Ben bukle -F ile test edildi

:

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

Sadece -d için -F değişti ve 0.0004 saniye var !!! Bir şişe sonrası işleyici öyle

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

Bence "multipart/form-data" içerik türünü almak için bir sorun var.