मैंने स्पष्ट रूप से पाइथन थ्रेड ऑब्जेक्ट के डेमन विशेषता के बारे में कुछ मौलिक समझा है।पाइथन डेमन थ्रेड्स को समझना
daemonic.py
import sys, threading, time
class TestThread(threading.Thread):
def __init__(self, daemon):
threading.Thread.__init__(self)
self.daemon = daemon
def run(self):
x = 0
while 1:
if self.daemon:
print "Daemon :: %s" % x
else:
print "Non-Daemon :: %s" % x
x += 1
time.sleep(1)
if __name__ == "__main__":
print "__main__ start"
if sys.argv[1] == "daemonic":
thread = TestThread(True)
else:
thread = TestThread(False)
thread.start()
time.sleep(5)
print "__main__ stop"
अजगर डॉक्स से::
निम्नलिखित पर विचार करें
पूरे अजगर कार्यक्रम बाहर निकलता है जब कोई जिंदा गैर डेमॉन धागे छोड़ दिया जाता है।
तो अगर मैं एक डेमॉन के रूप में TestThread साथ चलाने के लिए, मैं इसे बाहर निकलने के लिए एक बार मुख्य थ्रेड पूरा कर लिया है उम्मीद करेंगे। लेकिन ऐसा नहीं होता है:
> python daemonic.py daemonic
__main__ start
Daemon :: 0
Daemon :: 1
Daemon :: 2
Daemon :: 3
Daemon :: 4
__main__ stop
Daemon :: 5
Daemon :: 6
^C
मुझे क्या नहीं मिलता?
जस्टिन और ब्रेंट द्वारा अनुमानित अनुसार, मैं पायथन 2.5 के साथ चल रहा था। अभी घर आ गया है और अपनी मशीन पर 2.7 चल रहा है, और सबकुछ ठीक काम करता है। आपकी मदद के लिए धन्यवाद!
पता नहीं था कि 'isDaemon' और' setDaemon' 2.7 में बहुत अधिक बहिष्कृत थे। जानकार अच्छा लगा। –