2010-08-06 7 views
8

उदाहरण के लिए, यदि कोई एप्लिकेशन from twisted.internet import reactor करता है, और दूसरा एप्लिकेशन वही करता है, तो क्या वे reactors समान हैं?twisted.internet.reactor वैश्विक है?

मैं पूछ रहा हूं क्योंकि Deluge, जो एक मुड़ता हुआ उपयोग करता है, ऐसा लगता है कि यह अपने यूआई (gtk) को मुड़ने से प्रेरित अन्य अनुप्रयोगों को जोड़ने के लिए रिएक्टर का उपयोग करता है (मैं स्रोत को समझने की कोशिश कर रहा हूं)। उदाहरण के लिए, जब यूआई बंद हो जाता है तो यह बस reactor.stop() पर कॉल करता है।

क्या यह सब कुछ है? यह सिर्फ मेरे लिए जादू का प्रतीत होता है। क्या होगा यदि मैं एक और एप्लीकेशन चलाने के लिए चाहता था जो मुड़ता है?

+0

'एप्लिकेशन' से आपका क्या मतलब है? क्या आपका मतलब अलग पाइथन प्रक्रियाओं या एक ही प्रक्रिया में चल रही कई चीजें हैं? –

उत्तर

13

हाँ, पायथन में हर मॉड्यूल हमेशा वैश्विक है, या, यह बेहतर है, एक सिंगलटन डाल करने के लिए: जब आप from twisted.internet import reactor, पायथन के आयात तंत्र पहले चेकों sys.modules['twisted.internet.reactor'] करते हैं, और, कि अगर मौजूद है, रिटर्न मूल्य कहा, केवल अगर यह अस्तित्व में नहीं है (यानी, पहली बार एक मॉड्यूल आयात किया जाता है) मॉड्यूल वास्तव में पहली बार लोड किया जाता है (और संभावित भविष्य के आयात के लिए sys.modules में एक प्रविष्टि में रखा गया है)।

सिंगलटन डिज़ाइन पैटर्न में विशेष रूप से जादुई कुछ भी नहीं है, हालांकि यह कभी-कभी सीमित हो सकता है जब आपको उन चीज़ों में से एक से अधिक की आवश्यकता होती है जिसके लिए आर्किटेक्चर ने "केवल एक ही हो सकता है"। मुड़ के docs स्वीकार करते हैं कि:

नए आवेदन कोड इस मॉड्यूल आयात करने के लिए एक संदर्भ प्राप्त करने में सक्षम किया जा रहा है पर निर्भर रहने के पास करने के लिए पसंद करते हैं चाहिए और एक पैरामीटर आवश्यक होने पर ही, के रूप में रिएक्टर को स्वीकार नहीं बल्कि । यह इकाई परीक्षण को सरल बनाता है और को एक दिन का समर्थन करना आसान बनाता है रिएक्टर (प्रदर्शन वृद्धि के रूप में), हालांकि यह वर्तमान में नहीं है।

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

अन्यथा, अलग-अलग प्रक्रियाओं का उपयोग करें (उदा। मानक लाइब्रेरी के multiprocessing मॉड्यूल के साथ) प्रत्येक एक से अधिक रिएक्टर के साथ।

2

रिएक्टर वास्तव में वैश्विक है। यह इवेंट लूप का ख्याल रखता है, और आप घटनाओं का उपभोग करने के लिए हैंडलर पंजीकृत करते हैं। यदि आप एक ही रिएक्टर के साथ कई अनुप्रयोगों का उपयोग करना चाहते हैं, तो आप ट्विस्टेड डिमन का उपयोग कर सकते हैं। http://twistedmatrix.com/documents/current/core/howto/application.html

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