run functions on an interval in the background in python
from threading import Timer
class IntervalTimer(object):
""" run functions on intervals in the background
by: Cody Kochmann
"""
def __init__(self, seconds, function):
assert type(seconds) in (int,float)
assert callable(function)
self.seconds=seconds
self.function=function
self.stopped=False
self.running=False
def start(self):
if not self.stopped:
if not self.running:
self.function()
self.running=True
self.thread=Timer(self.seconds,self.function)
self.thread.start()
self.restart_thread=Timer(self.seconds, self.start)
self.restart_thread.start()
def stop(self):
try:
self.stopped = True
self.running = False
self.thread.cancel()
self.restart_thread.cancel()
except AttributeError:
pass
if __name__ == '__main__':
def hi():
print 'hi'
i=IntervalTimer(2, hi)
i.start()
from time import sleep
sleep(8)
i.stop()