En Python, usted simplemente no puede matar a un hilo.
Si usted realmente no necesita tener un hilo (!), Lo que puede hacer, en lugar de utilizar el paquete enhebrar (http://docs.python.org/2/library/threading.html), es usar el paquete multiprocesamiento (http://docs.python.org/2/library/multiprocessing.html). Aquí, para matar un proceso, sólo tiene que llamar al método:
yourProcess.terminate() # kill the process!
Python matará a su proceso (en Unix a través de la señal SIGTERM, mientras que en Windows a través de la llamada TerminateProcess()). ¡Preste atención para usarlo mientras usa una cola o un tubo! (Que podría corromper los datos en la cola de espera/Pipe)
Tenga en cuenta que la multiprocessing.Event y el trabajo multiprocessing.Semaphore exactamente de la misma manera de la threading.Event y la threading.Semaphore respectivamente. De hecho, los primeros son clones de los últimos.
Si REALMENTE necesita utilizar un subproceso, no hay manera de matar sus subprocesos directamente. Sin embargo, lo que puede hacer es usar un "hilo daemon". De hecho, en Python, un hilo puede ser marcado como daemon :
yourThread.daemon = True # set the Thread as a "daemon thread"
El programa principal se cerrará cuando no hay hilos no demonio se dejan vivos. En otras palabras, cuando su hilo principal (que es, por supuesto, un hilo que no sea daemon) terminará sus operaciones, el programa se cerrará incluso si todavía hay algunos hilos daemon en funcionamiento.
en cuenta que es necesario fijar un hilo como daemon antes del inicio () método se llama!
Por supuesto que puede, y debe, utilizar demonio incluso con multiprocesamiento. Aquí, cuando el proceso principal finaliza, intenta terminar todos sus procesos secundarios demoníacos.
Por último, por favor, tenga en cuenta que sys.exit() y os.kill() no son opciones.
¿Puedo preguntar por qué está utilizando el módulo * thread * de bajo nivel en lugar de la biblioteca * threading * de alto nivel? –