comprensión de hilo.juntar (tiempo de espera)

Por lo tanto, el parámetro de tiempo de espera , para un hilo, debe detener el hilo después de segundos de tiempo de espera (si aún no ha terminado).

En mi software estoy tratando de reemplazar un Queue.Queue.join () (contiene un elemento para cada hilo: cada hilo se ejecutará Queue.Queue.task_done ()) que podría detener el software si un hilo no termina . Entonces, si un hilo, entre otros 50, no termina, entonces todo se congela.

Quiero que cada hilo se detenga en 5 segundos , por ejemplo. Así que voy a comenzar cada hilo con un tiempo de espera de 5 segundos. ¿Es correcto?

CÓDIGO

import threading import time def tt(name, num): while True: num += 0.5 print 'thread ' + str(name) + ' at time ' + str(num) time.sleep(0.5) for i in range(3): t=threading.Thread(target=tt, args=(i, 0)) t.setDaemon(True) t.start() t.join(timeout=1) print 'end' 

RESULTADO

No está funcionando correctamente … cada hilo debe detenerse después de 1 segundo. El hilo 0 se detiene después de 3 segundos, el hilo 1 después de 2 segundos.

 thread 0 at time 0.5 thread 0 at time 1.0 thread 1 at time 0.5 thread 0 at time 1.5 thread 0 at time 2.0 thread 1 at time 1.0 thread 2 at time 0.5 thread 0 at time 2.5 thread 1 at time 1.5 thread 2 at time 1.0thread 1 at time 2.0 thread 0 at time 3.0 end 

Related of "comprensión de hilo.juntar (tiempo de espera)"

Estás malinterpretando lo que hace el timeout . Simplemente le dice a join cuánto tiempo se debe esperar para que el hilo se detenga. Si el subproceso todavía se está ejecutando después de que expire el tiempo de espera, la llamada de join finaliza, pero el subproceso continúa ejecutándose.

De los documentos:

Cuando el argumento de tiempo de espera está presente y no es Ninguno, debe ser un número de punto flotante que especifique un tiempo de espera para la operación en segundos (o fracciones del mismo). Como join () siempre devuelve None, debe llamar a isAlive () después de join () para decidir si se ha agotado el tiempo de espera. Si el hilo sigue vivo, la llamada a join () se ha agotado.