2011-11-01 13 views
12

इसे पोस्ट करने से पहले, मैंने mod_wsgi विकी समेत कुछ संसाधनों को ऑनलाइन पढ़ा है, लेकिन मैं उलझन में हूं कि Apache प्रक्रियाओं/थ्रेड्स mod_wsgi के साथ कैसे इंटरैक्ट करते हैं।अपाचे + mod_wsgi इंटरैक्शन

यह मेरी वर्तमान समझ है: अपाचे को चलाने के लिए कॉन्फ़िगर किया जा सकता है ताकि एक या अधिक बाल प्रक्रिया आने वाले अनुरोधों को संभाल सकें, और इन बाल प्रक्रियाओं में से प्रत्येक को सेवा अनुरोधों में एक या अधिक धागे का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। उसके बाद, चीजें मेरे लिए आलसी हो रही हैं। मेरे संदेह हैं:

  1. WSGIDaemonProcess क्या है, और वास्तव में पाइथन उप दुभाषिया का उपयोग करके मेरे Django ऐप को कौन कॉल करता है?
  2. यदि मेरे पास मेरा Django ऐप एक मोड के तहत चल रहा है जहां एक अपाचे बाल प्रक्रिया में एकाधिक थ्रेड की अनुमति है - क्या इसका मतलब यह है कि एक ही समय में कई अनुरोध मेरे ऐप तक पहुंच सकते हैं? यदि ऐसा है - मॉड्यूल लेवल वैरिएबल (किसी उपयोगकर्ता की आईडी का कहना है) को सेट करने जैसा कुछ कर सकता है अन्य समानांतर अनुरोधों से अधिक लिखा जा सकता है और गैर-थ्रेड सुरक्षित व्यवहार का कारण बन सकता है?
  3. ऊपर दिए गए मामले के लिए, पायथन के वैश्विक दुभाषिया लॉक के साथ, क्या थ्रेड वास्तव में समानांतर में निष्पादित होंगे?

उत्तर

10

प्रत्येक बिंदु के उत्तर।

1 - WSGIDaemonProcess/WSGIProcessGroup इंगित करता है कि mod_wsgi को WSGI एप्लिकेशन चलाने के लिए एक अलग प्रक्रिया का कांटा होना चाहिए। यह केवल एक कांटा है और एक कांटा/निष्पादन नहीं है, इसलिए mod_wsgi अभी भी इसके नियंत्रण में है। जब यह पता चला है कि एक डब्लूएसजीआई अनुप्रयोग में एक यूआरएल मानचित्र डिमन मोड में चल रहा है, तो अपाचे बाल कार्यकर्ता प्रक्रिया में mod_wsgi कोड डेमॉन मोड प्रक्रिया के माध्यम से अनुरोध विवरण प्रॉक्सी करेगा जहां mod_wsgi कोड वहां पढ़ता है और आपके डब्लूएसजीआई में कॉल करता है आवेदन।

2 - हां, एकाधिक अनुरोध एक साथ चल रहे हैं और एक ही समय में मॉड्यूल वैश्विक डेटा को संशोधित करना चाहते हैं।

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

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