Problema de temporizador de enroscado en Python con un intervalo grande
Cuando pongo un intervalo grande para ejecutar el programa, este termina sin ejecutar la función dada (join no resuelve el problema)
from threading import Timer
class TimerThread:
def __init__(self, delay_time, thread_function):
self.delay_time = delay_time
self.thread_function = thread_function
self._timer = None
def run_repeatedly(self):
self.thread_function()
self._timer = Timer(self.delay_time, self.run_repeatedly)
self._timer.start()
self._timer.join()
timer = TimerThread(60 * 60, self.func)
timer.run_repeatedly()
davy.ai
Posible explicación para el problema:
El objeto Timer se inicia después de llamar a la función y unirse al temporizador anterior. Esto crea una brecha potencial donde el temporizador podría terminar antes de que se inicie uno nuevo, lo que resultaría en que el programa termine sin ejecutar la función dada. El método join no es la solución adecuada en este caso, ya que espera a que se complete el temporizador actual antes de iniciar uno nuevo.
Posible solución:
Una opción para evitar brechas es iniciar el objeto Timer antes de llamar a la función. Esto asegura que siempre haya un temporizador en ejecución, incluso si la función tarda más en ejecutarse. Además, se puede eliminar el método join del método run_repeatedly ya que no es necesario.
Código modificado:
Nota: Este es solo un ejemplo de una posible solución y puede que no sea adecuado para todos los casos de uso. Es importante considerar otros factores como el tiempo de ejecución de la función y el intervalo entre llamadas para determinar el enfoque más adecuado.