जवाबों:
flask.Flask.run
अतिरिक्त कीवर्ड तर्क ( **options
) को स्वीकार करता है कि यह आगे की ओर है werkzeug.serving.run_simple
- उन तर्कों में से दो threaded
(एक बूलियन) हैं और processes
(जो आप अनुरोधों को संभालने के लिए एक से अधिक प्रक्रिया को एक से अधिक बार चलाने के लिए सेट कर सकते हैं)।
threaded
True
फ्लास्क 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 से अधिक समवर्ती उपयोगकर्ता नहीं हैं) तो इसे वास्तविक वेब सर्वर के पीछे खड़ा करना सुनिश्चित करें (फ्लास्क के डॉक्स के अनुभाग को देखें) कुछ सुझाए गए तरीकों के लिए तैनाती के विकल्प )।
app.run()
फ्लास्क के भीतर से सरल का उपयोग करना एक एकल थ्रेड पर एक एकल तुल्यकालिक सर्वर बनाता है जो एक समय में केवल एक ग्राहक की सेवा करने में सक्षम है। यह इस कारण से कम मांग (यानी विकास, डिबगिंग) के साथ नियंत्रित वातावरण में उपयोग के लिए अभिप्रेत है।
थ्रेडिंग थ्रेडिंग और उन्हें खुद को प्रबंधित करना शायद पायथन जीआईएल के कारण आपको बहुत दूर तक नहीं मिलेगा ।
उस ने कहा, आपके पास अभी भी कुछ अच्छे विकल्प हैं। Gunicorn एक ठोस, आसानी से उपयोग होने वाला WSGI सर्वर है जो आपको कई श्रमिकों (अलग-अलग प्रक्रियाओं, ताकि कोई GIL की चिंता न हो), और यहां तक कि अतुल्यकालिक श्रमिकों के साथ आता है, जो आपके ऐप को गति देगा (और इसे थोड़ा सुरक्षित करें) अपने हिस्से पर कोई काम नहीं करना चाहिए (विशेषकर फ्लास्क के साथ)।
फिर भी, गुनिकॉर्न को शायद सीधे सार्वजनिक रूप से उजागर नहीं किया जाना चाहिए। उत्पादन में, इसका उपयोग अधिक मजबूत HTTP सर्वर के पीछे किया जाना चाहिए; nginx Gunicorn और बोतल के साथ अच्छी तरह से जाना जाता है।
gunicorn app:app 127.0.0.1:8080
इसके बजाय अपने ऐप को चलाने देगा python app.py
। Nginx सार्वजनिक सेवा के रूप में कार्य करेगी जो आपके निजी Gunicorn- रन ऐप (एक रिवर्स-प्रॉक्सी) को उजागर करती है , जो निचले स्तर के HTTP कार्यान्वयन विवरण के सभी प्रकारों को
processes=100
और इससे खुश हो सकता हूं? मेरे मामले में, मुझे केवल स्थिर फ़ाइलों की आवश्यकता है, कोई HTTP पोस्ट विधियों की नहीं। मेरी आवश्यकता है, मैं अपने मूल एप्लिकेशन के हिस्से के रूप में सभी फ्लास्क धागे चलाना चाहता हूं, ताकि वे सभी चर साझा कर सकें।