क्या मैं स्टैंडअलोन के रूप में सिर्फ फ्लास्क app.run () का उपयोग करके कई ग्राहकों की सेवा कर सकता हूं?


203

मुझे पता है कि मैं फ्लास्क को अपाचे या अन्य वेब सर्वर से लिंक कर सकता हूं। लेकिन, मैं फ्लास्क को एक स्टैंडअलोन सर्वर के रूप में चलाने की सोच रहा था जो एक साथ कई ग्राहकों की सेवा कर रहा हो।

क्या यह संभव है? क्या मुझे कई धागों को संभालने और उन्हें प्रबंधित करने की आवश्यकता है?

जवाबों:


296

flask.Flask.runअतिरिक्त कीवर्ड तर्क ( **options) को स्वीकार करता है कि यह आगे की ओर है werkzeug.serving.run_simple- उन तर्कों में से दो threaded(एक बूलियन) हैं और processes(जो आप अनुरोधों को संभालने के लिए एक से अधिक प्रक्रिया को एक से अधिक बार चलाने के लिए सेट कर सकते हैं)।

threadedTrueफ्लास्क 1.0 के रूप में चूक , इसलिए फ्लास्क के नवीनतम संस्करणों के लिए, डिफ़ॉल्ट विकास सर्वर डिफ़ॉल्ट रूप से एक साथ कई ग्राहकों की सेवा करने में सक्षम होगा। फ्लास्क के पुराने संस्करणों के लिए, आप स्पष्ट रूप threaded=Trueसे इस व्यवहार को सक्षम करने के लिए पास कर सकते हैं।

उदाहरण के लिए, आप कर सकते हैं

if __name__ == '__main__':
    app.run(threaded=True)

पुराने फ्लास्क संस्करणों के साथ संगत थ्रेड्स का उपयोग करके कई क्लाइंट्स को संभालने के लिए, या

if __name__ == '__main__':
    app.run(threaded=False, processes=3)

आने वाले अनुरोधों को संभालने के लिए वेर्केजग को तीन प्रक्रियाओं को बताने के लिए, या बस

if __name__ == '__main__':
    app.run()

यदि आप जानते हैं कि आप 1.0 या बाद के फ्लास्क का उपयोग कर रहे हैं, तो थ्रेड का उपयोग करके कई क्लाइंट्स को संभालना है।

कहा जा रहा है कि, Werkzeug serving.run_simpleमानक पुस्तकालय के wsgirefपैकेज को लपेटता है - और उस पैकेज में WSGI का संदर्भ कार्यान्वयन है, न कि उत्पादन-तैयार वेब सर्वर। यदि आप उत्पादन में फ्लास्क का उपयोग करने जा रहे हैं (यह मानते हुए कि "उत्पादन" एक कम-ट्रैफ़िक आंतरिक अनुप्रयोग नहीं है जिसमें 10 से अधिक समवर्ती उपयोगकर्ता नहीं हैं) तो इसे वास्तविक वेब सर्वर के पीछे खड़ा करना सुनिश्चित करें (फ्लास्क के डॉक्स के अनुभाग को देखें) कुछ सुझाए गए तरीकों के लिए तैनाती के विकल्प )।


2
यदि मैं अधिकतम 100 उपयोगकर्ताओं को देख रहा हूं तो क्या होगा? क्या मैं सिर्फ असाइन कर सकता हूं processes=100और इससे खुश हो सकता हूं? मेरे मामले में, मुझे केवल स्थिर फ़ाइलों की आवश्यकता है, कोई HTTP पोस्ट विधियों की नहीं। मेरी आवश्यकता है, मैं अपने मूल एप्लिकेशन के हिस्से के रूप में सभी फ्लास्क धागे चलाना चाहता हूं, ताकि वे सभी चर साझा कर सकें।
ATOzTOA

4
चकल्स - @ATOzTOA - नहीं, कि शायद होगा काफी प्रतिकूल (प्रक्रियाओं अपेक्षाकृत महंगे हैं, और जब तक आप प्रत्येक अनुरोध में बहुत काम कर रहे हैं वहाँ कोई कारण नहीं क्यों 4 या 8 प्रक्रियाओं के लिए पर्याप्त नहीं होना चाहिए)। उस ने कहा, यदि आप केवल स्थिर सामग्री प्रदर्शित कर रहे हैं, तो आप एक सर्वर के साथ बेहतर होंगे जो कि करने के लिए अनुकूलित है (Apache, ngnix, IIS)।
सीन विएरा

2
इसके अलावा, आपको आमतौर पर चर को अनुरोधों में साझा करने की आवश्यकता नहीं है - यदि आप करते हैं तो आपको या तो खुद को एक प्रक्रिया तक सीमित रखने की आवश्यकता होगी या कुछ आउट-ऑफ-बैंड संचार (रेडिस, एक डेटाबेस, फाइलसिस्टम, आदि) का उपयोग करना होगा। आपकी प्रत्येक प्रक्रिया सिंक हो जाती है।
सीन विएरा

3
@ATOzTOA - यदि आप एक बेहतर सर्वर को स्पिन नहीं कर सकते हैं, तो मैं सिर्फ एक चक्कर दूंगा और देखूंगा कि क्या होता है। यदि यह लोड के तहत अच्छा प्रदर्शन नहीं करता है, तो आप इसे एक अलग वेबसर्वर के पीछे तैनात कर सकते हैं।
शॉन विएरा

2
@ATOzTOA, के बारे में आप क्यों निर्दिष्ट नहीं कर सकते अपने प्रश्न के बारे में और 'प्रक्रियाओं' एक ही समय में यहां 'पिरोया', कोड सीएफ: werkzeug.readthedocs.org/en/latest/_modules/werkzeug/serving
pyrho

62

app.run()फ्लास्क के भीतर से सरल का उपयोग करना एक एकल थ्रेड पर एक एकल तुल्यकालिक सर्वर बनाता है जो एक समय में केवल एक ग्राहक की सेवा करने में सक्षम है। यह इस कारण से कम मांग (यानी विकास, डिबगिंग) के साथ नियंत्रित वातावरण में उपयोग के लिए अभिप्रेत है।

थ्रेडिंग थ्रेडिंग और उन्हें खुद को प्रबंधित करना शायद पायथन जीआईएल के कारण आपको बहुत दूर तक नहीं मिलेगा ।

उस ने कहा, आपके पास अभी भी कुछ अच्छे विकल्प हैं। Gunicorn एक ठोस, आसानी से उपयोग होने वाला WSGI सर्वर है जो आपको कई श्रमिकों (अलग-अलग प्रक्रियाओं, ताकि कोई GIL की चिंता न हो), और यहां तक कि अतुल्यकालिक श्रमिकों के साथ आता है, जो आपके ऐप को गति देगा (और इसे थोड़ा सुरक्षित करें) अपने हिस्से पर कोई काम नहीं करना चाहिए (विशेषकर फ्लास्क के साथ)।

फिर भी, गुनिकॉर्न को शायद सीधे सार्वजनिक रूप से उजागर नहीं किया जाना चाहिए। उत्पादन में, इसका उपयोग अधिक मजबूत HTTP सर्वर के पीछे किया जाना चाहिए; nginx Gunicorn और बोतल के साथ अच्छी तरह से जाना जाता है।


17
काफी नहीं। गिंकोर्न अजगर है, नगनेक्स नहीं है। हालांकि आप उन्हें कैसे उपयोग करेंगे, यह नहीं है। Gunicorn आपको gunicorn app:app 127.0.0.1:8080इसके बजाय अपने ऐप को चलाने देगा python app.py। Nginx सार्वजनिक सेवा के रूप में कार्य करेगी जो आपके निजी Gunicorn- रन ऐप (एक रिवर्स-प्रॉक्सी) को उजागर करती है , जो निचले स्तर के HTTP कार्यान्वयन विवरण के सभी प्रकारों को
छिपाती है

App.run के साथ फ्लास्क (थ्रेडेड = ट्रू) Apache2 पर mod_wsgi flask.palletsprojects.com/en/1.1x/deploying/mod_wsgi
MortenB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.