2010-12-27 14 views
30

हर ग्राहक अपने सर्वर से कनेक्ट करने के लिए मैं इस तरह, एक नया धागा अंडे:भीतर से धागा कैसे बंद करें?

# Create a new client 
c = Client(self.server.accept(), globQueue[globQueueIndex], globQueueIndex, serverQueue) 

# Start it 
c.start() 

# And thread it 
self.threads.append(c) 

अब, मैं जानता हूँ कि मैं इस कोड का उपयोग सभी धागे को बंद कर सकते हैं:

# Loop through all the threads and close (join) them 
    for c in self.threads: 
     c.join() 

लेकिन यह कैसे क्या मैं थ्रेड को से में थ्रेड बंद कर सकता हूं?

उत्तर

37

जब आप एक धागा शुरू, यह एक समारोह आप इसे क्रियान्वित करने शुरू होता है (यदि आप threading.Thread का विस्तार कर रहे हैं, समारोह run() हो जाएगा)। धागे को समाप्त करने के लिए, बस उस समारोह से वापस आएं।

this के अनुसार, आप thread.exit() पर भी कॉल कर सकते हैं, जो एक अपवाद फेंक देगा जो चुपचाप धागे को समाप्त कर देगा।

+14

thread.exit() केवल धागा वस्तु के साथ काम करता है, लेकिन threading.Thread वर्ग वस्तु के साथ नहीं। – moeabdol

8

थोड़ा देर हो चुकी है, लेकिन जब मैं बंद करना चाहता हूं तो थ्रेड को बताने के लिए मैं _is_running चर का उपयोग करता हूं। इसका उपयोग करना आसान है, बस अपनी थ्रेड क्लास के अंदर एक स्टॉप() को लागू करें।

def stop(self): 
    self._is_running = False 

और while(self._is_running)

0

पर run() बस आपको आपके धागा को बलपूर्वक रोकने चाहते हैं: thread._Thread_stop() मेरे लिए बहुत अच्छा काम करता है।

+0

अपने उत्तर को बेहतर बनाने के लिए, आपको _when_ को शामिल करने के लिए कुछ दस्तावेज के लिंक के साथ, यहां सूचीबद्ध अन्य लोगों की तुलना में बेहतर विकल्प शामिल होना चाहिए। –

0

मॉड्यूल sys से sys.exit() के बारे में कैसे।

यदि sys.exit() को थ्रेड के भीतर से निष्पादित किया गया है तो यह केवल उस धागे को बंद कर देगा। उस के बारे में

इस उत्तर यहाँ वार्ता: Why does sys.exit() not exit when called inside a thread in Python?

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/18724894) –

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