threads threading thread hilos example ejemplos create basics python multithreading daemon

threading - Propiedad del demonio de subprocesos de Python



threading python ejemplos (3)

Estoy un poco confundido acerca de lo que significa establecer un hilo para ser un demonio. La documentación dice esto:

Un hilo se puede marcar como un "hilo daemon". La importancia de esta bandera es que todo el programa Python sale cuando solo quedan subprocesos de daemon. El valor inicial se hereda del hilo creador. El indicador se puede configurar a través de la propiedad daemon.

No estoy seguro de qué hace que esto sea diferente de un hilo normal. ¿Esto dice que este programa nunca terminará?

def threadfunc(): while True: time.sleep(1) threading.Thread(target=threadfunc).start()

A pesar de que el hilo principal termina su ejecución. Mientras

def threadfunc(): while True: time.sleep(1) th = threading.Thread(target=threadfunc) th.daemon = True th.start()

terminará inmediatamente?

Lo pregunto porque tengo una situación en la que en mi subproceso principal estoy llamando a sys.exit (), y el proceso simplemente se bloquea y mis otros subprocesos se están ejecutando cuando puedo ver el registro. ¿Tiene esto algo que ver con que se llame a sys.exit () con subprocesos vivos?


¿Esto dice que este programa nunca terminará?

Sí, ese programa no terminará, solo pruébalo.

Lo pregunto porque tengo una situación en la que en mi subproceso principal estoy llamando a sys.exit (), y el proceso simplemente se bloquea y mis otros subprocesos se están ejecutando cuando puedo ver el registro. ¿Tiene esto algo que ver con que se llame a sys.exit () con subprocesos vivos?

Sí, incluso la exit no detendrá otros subprocesos, simplemente genera SystemExit en el subproceso principal. Entonces, mientras que el subproceso principal se detendrá (al igual que lo hace en cualquier otra excepción no controlada), todos los demás subprocesos no demoníacos continuarán funcionando.


La configuración de thread.daemon = True permitirá que el programa principal salga. Las aplicaciones normalmente esperan hasta que todos los hilos secundarios se terminen antes de completar.


th.daemon = True #set this thread as a Daemon Thread

Puedes pensar en un hilo de Daemon como un servicio, esto significa que se ejecutará en segundo plano de tu computadora haciendo diferentes tareas, como indexar archivos, analizar XML, recuperar noticias, etc., cualquier cosa que sea un proceso de larga ejecución.

Su hilo principal terminará y su daemon seguirá ejecutándose en segundo plano, esa es la razón por la cual termina su programa aka Main thread, si solo quiere poner un bucle infinito y verá que su hilo aún se está ejecutando. Un ejemplo para un hilo de daemon es la recolección de basura.