Я, очевидно, неправильно понял что-то фундаментальное в отношении атрибута daemon объекта 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, и все работает нормально. Спасибо за помощь!