Django

2011-10-11 10 views
5

में ऑटो-टर्मिनिंग लंबे समय तक चलने वाले अनुरोधों में मुझे अपाचे + mod_wsgi चल रहा django कोड के साथ एक सेटअप मिला है, और यदि एक गैर-समाप्ति दृश्य में फिसल जाता है तो मैं सुरक्षा की एक परत जोड़ना चाहता हूं। कुछ जो मारता है एक अनुरोध से अधिक अनुरोध करें, कहें, 30 सेकंड आदर्श होगा।Django

परीक्षण के लिए मैंने एक दृश्य में time.sleep(60) डाला है।

मैंने अपाचे में TimeOut 30 सेटिंग की कोशिश की है, लेकिन मुझे अभी भी 60 सेकंड के बाद कर्ल लौट रहा है।

मुझे लगता है कि mod_wsgi स्वयं तीन अलग-अलग समय-आउट मान प्रदान करता है, लेकिन उनमें से कोई भी लंबे समय तक चलने वाले अनुरोध पर लागू नहीं होता है।

क्या इसके लिए डीजेगो मिडलवेयर का एक मानक टुकड़ा है या क्या यह एक घुंडी है जिसे मैं अपाचे या mod_wsgi पर याद कर रहा हूं?

उत्तर

6

मल्टीथ्रेड एप्लिकेशन में एक पाइथन अनुरोध थ्रेड को वास्तव में वास्तव में मुश्किल करना मुश्किल है। सबसे अच्छा आप कर सकते हैं पूरी प्रक्रिया को बंद करने और इसे पुनरारंभ करने का निर्णय लेते हैं। चूंकि ऐसी कोई कार्रवाई समवर्ती अनुरोधों को बाधित कर देगी, इसलिए परिणामस्वरूप आपको वास्तव में एक थ्रेडेड कॉन्फ़िगरेशन पर सीमित होना होगा।

तब भी mod_wsgi 3.X में समर्थन इस के लिए आदर्श नहीं है। डेमॉन मोड के लिए निष्क्रियता-टाइमआउट है, लेकिन यह वास्तव में प्रक्रिया को दो परिस्थितियों में पुनरारंभ करने का कारण बनता है। पहला तब होता है जब कोई अनुरोध नहीं होता है और प्रक्रिया निष्क्रिय होती है। दूसरा यह है कि जब सभी अनुरोध धागे अवरुद्ध हो जाते हैं और टाइमआउट समाप्त हो जाता है।

mod_wsgi 4.X (इस समय भंडार ट्रंक में) में, दो अवधारणाओं को अलग कर दिया गया है और अब निष्क्रियता-टाइमआउट केवल समवर्ती अनुरोधों के साथ पूरी तरह से निष्क्रिय प्रक्रिया पर लागू होता है। पूरी प्रक्रिया अवरुद्ध होने पर एक नया अवरुद्ध-टाइमआउट अलग-अलग समय-समय पर विशिष्ट रूप से निर्दिष्ट किया गया है। यह वह दूसरा है जिसे आप उपयोग कर सकते हैं।

यदि आप नए विकल्प के बारे में और जानना चाहते हैं, तो आपको चर्चा करने के लिए mod_wsgi मेलिंग सूची पर जाना होगा।

+0

धन्यवाद। एक चीज जिसे हमने करने की कोशिश की थी, से स्विच करना था, प्रत्येक प्रक्रिया में बीस अनुरोध धागे के साथ 5 प्रक्रियाएं, 100 प्रक्रियाओं में प्रत्येक अनुरोध थ्रेड के साथ। आशा है कि mod_wsgi के टाइमआउट्स तब प्रक्रियाओं को मार सकते हैं जो असंबद्ध अनुरोधों को नुकसान पहुंचाते हैं। अभ्यास में जो सिस्टम मेमोरी कारणों के लिए काम नहीं करता था (मुझे अधिक साझा मेमोरी की उम्मीद होगी), लेकिन क्या यह संभव है कि mod_wsgi उस प्रक्रिया को मार सकता है यदि निष्क्रियता-टाइमआउट ट्रिगर करता है? –

+0

आवेदन कांटा के बाद लोड किया जाता है, इसलिए कुछ भी साझा नहीं किया जाता है कि लेखन पर प्रतिलिपि एक लाभ होगा। पायथन में फोर्किंग से पहले प्रीलोडिंग का लाभ उतना ही नहीं है जितना लोग सोचेंगे क्योंकि कोड निष्पादन संदर्भ संख्याओं में हेरफेर करता है और इसलिए अधिकांश चीजों पर प्रतिलिपि बनाई जाती है। –

+0

mod_wsgi 4.0 में अवरुद्ध-टाइमआउट विकल्प अभी भी आपकी सबसे अच्छी शर्त बनने जा रहा है। आप अभी भी मल्टीथ्रेडेड चला सकते हैं और जब सभी धागे फंस गए हैं तो यह किक जाएगा। इंतजार कर रहे हैं जब तक कि सभी थ्रेड अटक नहीं है। तो एक अवरुद्ध अनुरोध सेटिंग भी है। यदि आपके पास धागे = 15 हैं, तो आप अवरुद्ध-अनुरोध = 5 कह सकते हैं। तो जैसे ही इसे पांच धागे फंस जाते हैं और हिट पॉइंट होते हैं जहां प्रक्रिया द्वारा कोई अनुरोध नहीं किया जा रहा है, तो यह सुरक्षित रूप से पुनरारंभ होगा। अवरुद्ध अनुरोध थ्रेसहोल्ड सेट करने में सक्षम होने से आपको सुरक्षा मार्जिन मिल जाता है, इसलिए प्रक्रिया कम नहीं होती है। –