2013-10-06 9 views
10

डॉक्स से: http://docs.python.org/2/library/threadमुख्य धागे sys.exit() को कॉल करते समय अन्य धागे का क्या होता है?

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

और यहाँ, डॉक्स में (http://docs.python.org/2/library/threading) यह कहते हैं:

एक धागा एक "डेमॉन सूत्र" के रूप में चिह्नित किया जा सकता है। इस ध्वज का महत्व यह है कि पूरे पायथन प्रोग्राम निकलता है जब केवल डेमॉन थ्रेड शेष होते हैं। प्रारंभिक मान बनाने के धागे से विरासत में मिला है।

आइए ही के बारे में गैर डेमॉन धागे यहाँ बात। चूंकि, पहला उद्धरण गैर-डिमन धागे के लिए कोई विशेष संदर्भ नहीं देता है, मुझे लगता है कि मुख्य धागा बाहर निकलने पर भी गैर-डिमन धागे को मारना चाहिए। हालांकि, दूसरा उद्धरण अन्यथा सुझाता है। और वास्तव में, जब मुख्य धागा निकलता है तो गैर-डिमन थ्रेड वास्तव में नहीं मारे जाते हैं। तो, यहां पहले उद्धरण का बिंदु क्या है? thread और threading:

+0

लिखें कोड और इसे आज़माने –

+2

यह प्रतीत होता है कि 'thread' मॉड्यूल डेमॉन धागे के रूप में सब कुछ संभालती है, जबकि' threading' "गैर डेमॉन" धागे की अवधारणा कहते हैं। –

+0

@ user2799617: मैंने कोड लिखा था और निष्कर्ष पर आया था "जब मुख्य थ्रेड निकलता है तो गैर-डिमन थ्रेड वास्तव में नहीं मारे जाते हैं"।यही कारण है कि, मैं सोच रहा हूं कि पहला उद्धरण कब लागू होता है क्योंकि मेरी प्रणाली शायद उन "अधिकांश अन्य प्रणालियों" में से एक है: उबंटू 12.10 रनिंग पायथन 2.7 – gjain

उत्तर

8

प्रलेखन आप संदर्भ दो अलग मॉड्यूल से आता है। thread एक निम्न-स्तरीय मॉड्यूल है जो "थ्रेड" के अर्थ के प्लेटफ़ॉर्म के विचार को कम या कम प्रत्यक्ष पहुंच प्रदान करता है। threading कम प्लेटफॉर्म निर्भरता के साथ "थ्रेड" की उच्च-स्तरीय धारणा प्रदान करता है।

यही कारण है कि दस्तावेज़ अलग-अलग चीजें कहते हैं। बाहर निकलने पर निम्न-स्तर thread "थ्रेड" के साथ क्या होता है यह प्लेटफॉर्म सी के थ्रेड के संस्करण पर निर्भर करता है, लेकिन किसी भी मामले में पायथन को कोई प्रयास करने की आवश्यकता नहीं है - या नहीं - उन्हें साफ़ रूप से बंद करें।

एक threading.Thread अलग है। पायथन की सामान्य शटडाउन प्रसंस्करण का हिस्सा .join() सभी गैर-डिमन threading.Thread धागे है। तो कार्यक्रम तब तक खत्म नहीं होगा जब तक कि सभी गैर-डिमन threading.Thread धागे समाप्त हो गए हैं (जो सुनिश्चित करने के लिए प्रोग्रामर की ज़िम्मेदारी है)। ध्यान दें कि निम्न-स्तर thread मॉड्यूल थ्रेड में .join() - .join() की कोई अवधारणा नहीं है threading मॉड्यूल द्वारा उच्च-स्तरीय अवधारणा लागू की गई है।

सलाह: thread के बजाय threading का उपयोग करें जब तक कि आपके पास thread का उपयोग करने के उत्कृष्ट कारण न हों। threading बेहतर व्यवहार किया जाता है और कई उपयोगी उपकरण प्रदान करता है। thread का उपयोग करते समय एक उदाहरण बेहतर है? मैं एक के बारे में नहीं सोच सकता ;-)

नोट: पायथन 3 में, निम्न स्तर thread मॉड्यूल का नाम बदलकर _thread कर दिया गया है। हमेशा के रूप में, अग्रणी अंडरस्कोर संकेत देता है "इसके साथ गड़बड़ नहीं करना बेहतर है - लेकिन अगर आपको जरूरी है तो यह यहां है"।

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