Esto podría ser una pregunta estúpida, pero estoy probando algunas de mis suposiciones sobre Python y estoy confundido en cuanto a por qué el siguiente fragmento de código no saldría cuando se llama en el hilo, pero saldría cuando se llame en el principal hilo.¿Por qué sys.exit() no sale cuando se llama dentro de un hilo en Python?
import sys, time
from threading import Thread
def testexit():
time.sleep(5)
sys.exit()
print "post thread exit"
t = Thread(target = testexit)
t.start()
t.join()
print "pre main exit, post thread exit"
sys.exit()
print "post main exit"
Los documentos para sys.exit() indican que la llamada debe salir de Python. Puedo ver en la salida de este programa que "publicar salida de hilo" nunca se imprime, pero el hilo principal simplemente continúa incluso después de que sale el hilo.
¿Hay una instancia separada del intérprete que se está creando para cada subproceso, y la llamada a exit() solo está saliendo de esa instancia separada? De ser así, ¿cómo gestiona la implementación de subprocesos el acceso a los recursos compartidos? ¿Qué sucede si quiero salir del programa del hilo (no es lo que realmente quiero, pero entiendo)?
No necesita 'Queue' aquí. Solo un simple 'bool' saldrá bien. El nombre clásico para esta variable es 'is_active' y su valor predeterminado inicial es' True'. –
Sí, estás en lo correcto. Según http://effbot.org/zone/thread-synchronization.htm, modificar un 'bool' (o cualquier otra operación atómica) funcionará perfectamente para este problema en particular. La razón por la que voy con 'Queue's es que cuando trabajo con agentes con hilos, suelo terminar necesitando varias señales diferentes (' flush', 'reconnect',' exit', etc ...) casi de inmediato. – Deestan