Obviamente, he entendido mal algo fundamental sobre el atributo daemon de un objeto Thread Thread.Comprender los hilos del daemon de Python
considerar lo siguiente:
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"
De la documentación de Python:
enteras se sale del programa Python cuando sin hilos no demonio se dejan vivos.
Así que si corro con TestThread como daemon, esperaría que salga una vez que el hilo principal se haya completado. Pero esto no sucede:
> python daemonic.py daemonic
__main__ start
Daemon :: 0
Daemon :: 1
Daemon :: 2
Daemon :: 3
Daemon :: 4
__main__ stop
Daemon :: 5
Daemon :: 6
^C
¿Qué no consigo?
Según lo adivinado por Justin y Brent, corría con Python 2.5. Acabo de llegar a casa y probé en mi propia máquina con 2.7, y todo funciona bien. Gracias por tu ayuda!
No me di cuenta de que 'isDaemon' y' setDaemon' estaban bastante obsoletos en 2.7. Bueno saber. –