हाँ, पायथन में हर मॉड्यूल हमेशा वैश्विक है, या, यह बेहतर है, एक सिंगलटन डाल करने के लिए: जब आप from twisted.internet import reactor
, पायथन के आयात तंत्र पहले चेकों sys.modules['twisted.internet.reactor']
करते हैं, और, कि अगर मौजूद है, रिटर्न मूल्य कहा, केवल अगर यह अस्तित्व में नहीं है (यानी, पहली बार एक मॉड्यूल आयात किया जाता है) मॉड्यूल वास्तव में पहली बार लोड किया जाता है (और संभावित भविष्य के आयात के लिए sys.modules
में एक प्रविष्टि में रखा गया है)।
सिंगलटन डिज़ाइन पैटर्न में विशेष रूप से जादुई कुछ भी नहीं है, हालांकि यह कभी-कभी सीमित हो सकता है जब आपको उन चीज़ों में से एक से अधिक की आवश्यकता होती है जिसके लिए आर्किटेक्चर ने "केवल एक ही हो सकता है"। मुड़ के docs स्वीकार करते हैं कि:
नए आवेदन कोड इस मॉड्यूल आयात करने के लिए एक संदर्भ प्राप्त करने में सक्षम किया जा रहा है पर निर्भर रहने के पास करने के लिए पसंद करते हैं चाहिए और एक पैरामीटर आवश्यक होने पर ही, के रूप में रिएक्टर को स्वीकार नहीं बल्कि । यह इकाई परीक्षण को सरल बनाता है और को एक दिन का समर्थन करना आसान बनाता है रिएक्टर (प्रदर्शन वृद्धि के रूप में), हालांकि यह वर्तमान में नहीं है।
सबसे अच्छा तरीका है (, कि है, कई घटना छोरों, के भीतर कई रिएक्टरों का समर्थन करने के लिए आवश्यक सूक्ष्म तंत्र कोडिंग यह संभव बनाने के लिए, अगर यह अपने अनुप्रयोग के लिए महत्वपूर्ण है, मुड़ परियोजना के लिए योगदान करने के लिए है, या तो श्रम एक ऐप) या फंडिंग (पैसा इस काम को करने के लिए किसी को बनाए रखने में सक्षम बनाएगा)।
अन्यथा, अलग-अलग प्रक्रियाओं का उपयोग करें (उदा। मानक लाइब्रेरी के multiprocessing
मॉड्यूल के साथ) प्रत्येक एक से अधिक रिएक्टर के साथ।
स्रोत
2010-08-06 14:43:32
'एप्लिकेशन' से आपका क्या मतलब है? क्या आपका मतलब अलग पाइथन प्रक्रियाओं या एक ही प्रक्रिया में चल रही कई चीजें हैं? –