2012-11-22 20 views
23

मैं फ्लास्क एप्लिकेशन लिख रहा हूं जो जेसन डेटा के साथ POST अनुरोध स्वीकार करता है। मैंने आवेदन के लिए पारित डेटा आकार के आधार पर प्रतिक्रिया समय में भारी अंतर देखा। डिबगिंग के बाद मैंने लाइन को समस्या को कम कर दिया जहां मैं अनुरोध ऑब्जेक्ट से जेसन डेटा पुनर्प्राप्त कर रहा था। यह ध्यान रखना महत्वपूर्ण हो सकता है कि फ्लास्क विकास सर्वर पर परीक्षण किया गया था।अनुरोध से पोस्ट डेटा पुनर्प्राप्त करने पर फ्लास्क धीमा है?

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

मैं इस लाइन का समय समाप्त हो और 1024 के डेटा (शायद संयोग नहीं) और कम पात्रों के लिए यह 1 सेकंड से अधिक 0.002s ले लिया और 1024 से अधिक कुछ भी के लिए! यहां क्या हो रहा है? क्या यह विकास सर्वर की सीमा है?

संपादित करें: यही बात पोस्ट डेटा request.form.get के माध्यम से 1024 से अधिक सामग्री लंबाई के साथ ('somedata') प्राप्त करने के लिए होता है

संपादित करें: मैं एक ही उदाहरण अपाचे

द्वारा सेवा के साथ इस मुद्दे को दोहराने नहीं कर सकता

संपादित करें: मैं WERKZEUG मॉड्यूल में खुदाई शुरू की और पाया कि सुस्ती तब होता है जब wsgi.py मॉड्यूल जो BaseHTTPRequestHandler से पारित हो जाता है में प्रतिक्रिया संदेश self._read(to_read) पढ़ने। अभी भी इतना धीमा क्यों नहीं पता।


यहाँ पर्यावरण विवरण: उबंटू - 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

बैरल यह नहीं है। –

+3

क्या आप इसे किसी अन्य स्टैंडअलोन डब्लूएसजीआई सर्वर के साथ दोहरा सकते हैं?जैसे कि गनिकोर्न, टोरनाडो, ... http://flask.pocoo.org/docs/deploying/wsgi-standalone/ –

उत्तर

4

कुप्पी विकास सर्वर धीमा होने की उम्मीद है। http://flask.pocoo.org/docs/deploying/:

आप विकास के दौरान बिल्टिन सर्वर का उपयोग कर सकते हैं, लेकिन आपको उत्पादन अनुप्रयोगों के लिए पूर्ण तैनाती विकल्प का उपयोग करना चाहिए। (उत्पादन में निर्मित विकास सर्वर का प्रयोग न करें।)

मार्कस टिप्पणी में उल्लेख किया है, gunicorn या बवंडर की तरह एक और WSGI सर्वर बहुत तेजी से और अधिक विश्वसनीय होगा, इसलिए निश्चित रूप से तैनाती और बेंच मार्किंग के लिए उन में से एक का उपयोग करें ।

यदि आप विकास के दौरान जल्दी से काम करने के बारे में चिंतित हैं, तो आप तैनाती में जैसे ही विकास में बंदूक का उपयोग कर सकते हैं। यदि आप उसकेोकू पर तैनात कर रहे हैं, उदाहरण के लिए, आप "फोरमैन स्टार्ट" चला सकते हैं और गनिकॉर्न सर्वर ठीक से शुरू हो जाएगा।

2

मुझे इस तरह की एक पंक्ति पर यह समस्या थी, इसमें लगभग 1.0 सेकंड लग रहा था! यह एक कुप्पी पद हैंडलर में बताया गया है:

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

मैं कर्ल एफ के साथ यह परीक्षण किया गया था:

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

मैं सिर्फ -d को एफ बदल गया और यह 0.0004 सेकंड मिल गया !!!

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

मुझे लगता है कि फ्लास्क को "मल्टीपार्ट/फॉर्म-डेटा" सामग्री-प्रकार को पुनर्प्राप्त करने में कोई समस्या है।

संबंधित मुद्दे