我显然对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
我哪里理解不了?
正如Justin和Brent猜测的那样,我使用的是Python 2.5。回到家后,我尝试在自己的机器上运行2.7版本,一切都运行良好。感谢你们的帮助!
isDaemon
和setDaemon
已经基本被弃用了。知道了就好。 - Brent Writes Code