我明顯誤解了Python Thread對象的守護進程屬性的基本原理。瞭解Python守護進程線程
考慮以下幾點:
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"
從python文檔:當 沒有活着的非守護線程留給
整個Python程序退出。
因此,如果我使用TestThread作爲守護進程運行,我希望它在主線程完成後退出。但是,這並沒有發生:
> python daemonic.py daemonic
__main__ start
Daemon :: 0
Daemon :: 1
Daemon :: 2
Daemon :: 3
Daemon :: 4
__main__ stop
Daemon :: 5
Daemon :: 6
^C
我得不到什麼?
正如賈斯汀和布倫特所猜測的那樣,我是用Python 2.5運行的。剛剛回家,並嘗試在我自己的機器上運行2.7,並且一切正常。感謝您的幫助!
沒有意識到'isDaemon'和'setDaemon'在2.7中已經被棄用了。很高興知道。 – 2010-08-12 17:43:32