from threading import Thread, Event, Timer
import time
def TimerReset(*args, **kwargs):
""" Global function for Timer """
return _TimerReset(*args, **kwargs)
class _TimerReset(Thread):
"""Call a function after a specified number of seconds:
t = TimerReset(30.0, f, args=[], kwargs={})
t.start()
t.cancel() # stop the timer's action if it's still waiting
"""
def __init__(self, interval, function, args=[], kwargs={}):
Thread.__init__(self)
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.finished = Event()
self.resetted = True
def cancel(self):
"""Stop the timer if it hasn't finished yet"""
self.finished.set()
def run(self):
print "Time: %s - timer running..." % time.asctime()
while self.resetted:
print "Time: %s - timer waiting for timeout in %.2f..." % (time.asctime(), self.interval)
self.resetted = False
self.finished.wait(self.interval)
if not self.finished.isSet():
self.function(*self.args, **self.kwargs)
self.finished.set()
print "Time: %s - timer finished!" % time.asctime()
def reset(self, interval=None):
""" Reset the timer """
if interval:
print "Time: %s - timer resetting to %.2f..." % (time.asctime(), interval)
self.interval = interval
else:
print "Time: %s - timer resetting..." % time.asctime()
self.resetted = True
self.finished.set()
self.finished.clear()
#
# Usage examples
#
def hello():
print "Time: %s - hello, world" % time.asctime()
# No reset
print "Time: %s - start..." % time.asctime()
tim = TimerReset(5, hello)
tim.start()
print "Time: %s - sleeping for 10..." % time.asctime()
time.sleep (10)
print "Time: %s - end..." % time.asctime()
print "\n\n"
# With Reset
print "Time: %s - start..." % time.asctime()
tim = TimerReset(5, hello)
tim.start()
print "Time: %s - sleeping for 4..." % time.asctime()
time.sleep (4)
tim.reset()
print "Time: %s - sleeping for 10..." % time.asctime()
time.sleep (10)
print "Time: %s - end..." % time.asctime()
print "\n\n"
# With reset interval
print "Time: %s - start..." % time.asctime()
tim = TimerReset(5, hello)
tim.start()
print "Time: %s - sleeping for 4..." % time.asctime()
time.sleep (4)
tim.reset (9)
print "Time: %s - sleeping for 10..." % time.asctime()
time.sleep (10)
print "Time: %s - end..." % time.asctime()
#
# Output of test program
#
Time: Fri Sep 24 15:31:16 2010 - start...
Time: Fri Sep 24 15:31:16 2010 - timer running...
Time: Fri Sep 24 15:31:16 2010 - timer waiting for timeout in 5.00...
Time: Fri Sep 24 15:31:16 2010 - sleeping for 10...
Time: Fri Sep 24 15:31:21 2010 - hello, world
Time: Fri Sep 24 15:31:21 2010 - timer finished!
Time: Fri Sep 24 15:31:26 2010 - end...
Time: Fri Sep 24 15:31:26 2010 - start...
Time: Fri Sep 24 15:31:26 2010 - timer running...
Time: Fri Sep 24 15:31:26 2010 - timer waiting for timeout in 5.00...
Time: Fri Sep 24 15:31:26 2010 - sleeping for 4...
Time: Fri Sep 24 15:31:30 2010 - timer resetting...
Time: Fri Sep 24 15:31:30 2010 - sleeping for 10...
Time: Fri Sep 24 15:31:30 2010 - timer waiting for timeout in 5.00...
Time: Fri Sep 24 15:31:35 2010 - hello, world
Time: Fri Sep 24 15:31:35 2010 - timer finished!
Time: Fri Sep 24 15:31:40 2010 - end...
Time: Fri Sep 24 15:31:40 2010 - start...
Time: Fri Sep 24 15:31:40 2010 - timer running...
Time: Fri Sep 24 15:31:40 2010 - timer waiting for timeout in 5.00...
Time: Fri Sep 24 15:31:40 2010 - sleeping for 4...
Time: Fri Sep 24 15:31:44 2010 - timer resetting to 9.00...
Time: Fri Sep 24 15:31:44 2010 - sleeping for 10...
Time: Fri Sep 24 15:31:44 2010 - timer waiting for timeout in 9.00...
Time: Fri Sep 24 15:31:53 2010 - hello, world
Time: Fri Sep 24 15:31:53 2010 - timer finished!
Time: Fri Sep 24 15:31:54 2010 - end...