Otros consejos

Si realiza su trabajador hilos demonio de hilos, que van a morir cuando todos sus hilos no demonio (por ejemplo, el hilo principal) han salido.

http://docs.python.org/library/threading. html # threading.Thread.daemon

Utilice el atexit módulo de la biblioteca estándar de Python para registrar funciones de "terminación" que serán llamadas (en el hilo principal) en cualquier terminación razonablemente "limpia" del hilo principal, incluyendo una excepción no capturada como KeyboardInterrupt. Tales funciones de terminación pueden (¡aunque, inevitablemente, en el hilo principal) llamar a cualquier función stop necesita; junto con la posibilidad de crear un hilo como daemon, que proporciona las herramientas necesarias para diseñar correctamente la funcionalidad del sistema que necesita.

Si generará un subproceso como tal - myThread = Thread(target = function) - y luego hacer myThread.start(); myThread.join(). Cuando se inicia CTRL-C, el hilo principal no sale porque está esperando en esa llamada myThread.join() bloqueo. Para solucionar este problema, sólo tiene que poner en un tiempo de espera en la llamada .join (). El tiempo de espera puede ser tan largo como desee. Si usted quiere que esperar indefinidamente, sólo hay que poner en un muy largo tiempo de espera, al igual que 99999. También es una buena práctica para hacer myThread.daemon = True así que toda la salida de los hilos cuando el hilo principal (no-demonio) salidas.

Trate con la activación de la sub-hilo como daemon-hilo.

Por ejemplo:

from threading import Thread

threaded = Thread(target=<your-method>)
threaded.daemon = True  # This thread dies when main thread (only non-daemon thread) exits.
threaded.start()

O (en una línea):

from threading import Thread

threaded = Thread(target=<your-method>, daemon=True).start()

Cuando sus principales termina rosca ( "por ejemplo, cuando se presiona Ctrl + C ") que otros hilos mata con la instrucción anterior.

hilos Daemon mueren sin gracia por lo que cualquier instrucción Finalizer no se ejecutan. Una posible solución es comprobar es hilo principal está vivo en lugar de bucle infinito.

por ejemplo. para Python 3:

while threading.main_thread().isAlive():
    do.you.subthread.thing()
gracefully.close.the.thread()

si el hilo principal es aún con vida desde otro hilo .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top