Contamos con la mejor respuesta que descubrimos por todo internet. Esperamos que te sea de utilidad y si deseas comentarnos cualquier detalle que nos pueda ayudar a mejorar hazlo libremente.
Solución:
La mejor manera es iniciar el subproceso del temporizador una vez. Dentro de su subproceso de temporizador codificaría lo siguiente
class MyThread(Thread):
def __init__(self, event):
Thread.__init__(self)
self.stopped = event
def run(self):
while not self.stopped.wait(0.5):
print("my thread")
# call a function
En el código que inició el temporizador, puede set
el evento detenido para detener el temporizador.
stopFlag = Event()
thread = MyThread(stopFlag)
thread.start()
# this will stop the timer
stopFlag.set()
De Equivalente de setInterval en python:
import threading
def setInterval(interval):
def decorator(function):
def wrapper(*args, **kwargs):
stopped = threading.Event()
def loop(): # executed in another thread
while not stopped.wait(interval): # until stopped
function(*args, **kwargs)
t = threading.Thread(target=loop)
t.daemon = True # stop if the program exits
t.start()
return stopped
return wrapper
return decorator
Uso:
@setInterval(.5)
def function():
"..."
stop = function() # start timer, the first call is in .5 seconds
stop.set() # stop the loop
stop = function() # start new timer
# ...
stop.set()
O aquí está la misma funcionalidad pero como una función independiente en lugar de un decorador:
cancel_future_calls = call_repeatedly(60, print, "Hello, World")
# ...
cancel_future_calls()
Aquí se explica cómo hacerlo sin usar subprocesos.
Usando subprocesos de temporizador-
from threading import Timer,Thread,Event
class perpetualTimer():
def __init__(self,t,hFunction):
self.t=t
self.hFunction = hFunction
self.thread = Timer(self.t,self.handle_function)
def handle_function(self):
self.hFunction()
self.thread = Timer(self.t,self.handle_function)
self.thread.start()
def start(self):
self.thread.start()
def cancel(self):
self.thread.cancel()
def printer():
print 'ipsem lorem'
t = perpetualTimer(5,printer)
t.start()
esto puede ser detenido por t.cancel()
Calificaciones y comentarios
Si haces scroll puedes encontrar las interpretaciones de otros administradores, tú igualmente puedes dejar el tuyo si lo deseas.