subprocesos múltiples: unión de Python con tiempo de espera = 0

CorePress2024-01-24  9

Estoy trabajando en un código que no he escrito yo mismo.

Encontré la siguiente línea de código: thread.join(timeout=0.0) aplicado a un objeto threading.Thread.

¿Cuál podría ser el propósito de tal línea?

EDITAR: mi pregunta se refiere específicamente al tiempo de espera = 0. ¿Tiene algún propósito utilizar una combinación con un tiempo de espera = 0? Tengo entendido que una unión tiene como objetivo esperar, por lo tanto, usar un tiempo de espera = 0 parece un poco contradictorio.

¿Esto responde a tu pregunta? Entendiendo thread.join(timeout)

- Jacob Lee

26/03/2021 a las 19:33



------------------------------------

El tiempo de espera básicamente significa el momento en que finalizará el hilo de unión. Por lo tanto, un thread.join(timeout=0.0) finalizará en 0 segundos. Sin embargo, un thread.join(timeout=1.0) se ejecutará durante un segundo antes de cerrarse. Ahora, si el subproceso sigue ejecutándose después de que expire el tiempo de espera, la llamada de unión finaliza, pero el subproceso continúa ejecutándose.

En cuanto a .join(), es lo que hace que el hilo principal espere a que finalice el hilo. De lo contrario, el hilo se ejecutará solo.

Entonces, una forma de pensar en .join() como una función de "retención" en el hilo principal: en cierto modo, desenhebra el hilo y se ejecuta secuencialmente en el hilo principal.hilo, antes de que el hilo principal pueda continuar. Asegura que su hilo esté completo antes de que el hilo principal avance. Tenga en cuenta que esto significa que está bien si su hilo ya está terminado antes de llamar a .join(); el hilo principal simplemente se libera inmediatamente cuando se llama a .join().

0



------------------------------------

La documentación sobre subprocesos lo explica bien:

Cuando el argumento de tiempo de espera está presente y no 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 Ninguno, debes llamar a is_alive() después de join() para deDecide si se agotó el tiempo de espera: si el hilo aún está vivo, la llamada a join() expiró.

En esencia, el argumento de tiempo de espera le dice a join() cuánto tiempo esperar para que finalice el hilo. Si el período de tiempo dictado por el tiempo de espera expira, la llamada join() finalizará, pero el hilo continuará ejecutándose. Es por eso que necesitarías llamar a is_alive() para verificar si el hilo aún se está ejecutando.

Establecer el argumento de tiempo de espera en 0.0 esperaría 0.0 segundos antes de que se agotara el tiempo de espera, por lo tanto, el tiempo de espera se agotaría inmediatamente. Entonces, para responder a tu pregunta, no, realmente no tendría sentido llamar a join() y pasar 0.0, ya que no habría espera.

0

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare