I've been using the code from another solution which works well but I would like to add some functionality. The following class creates a threaded timer that starts immediately after the start method is called. I would like the timer to wait some length of time before starting the repeating timer.
import time
from threading import Timer
class RepeatTimer(Timer):
def run(self):
while not self.finished.wait(self.interval):
self.function(*self.args, **self.kwargs)
def hello():
print('hello')
t = RepeatTimer(2, hello)
t.start()
This will print "hello" every two seconds until t.cancel()
is called.
I would like for the timer to wait N number of seconds before starting the repeating timer. I tried modifying the class to take an additional parameter, but it does not work.
class RepeatTimer(Timer):
def __init__(self, initial_delay):
super().__init__()
self.initial_delay = initial_delay
def run(self):
time.sleep(initial_delay)
while not self.finished.wait(self.interval):
self.function(*self.args, **self.kwargs)
t = RepeatTimer(2, hello, 5)
With the error??
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() takes 2 positional arguments but 4 were given
I've also tried adding all of the Timer arguments to the __init__
method but that doesn't help.
class RepeatTimer(Timer):
def __init__(self, interval, function, initial_delay):
super().__init__()
self.interval = interval
self.function = function
self.initial_delay = initial_delay
def run(self):
time.sleep(initial_delay)
while not self.finished.wait(self.interval):
self.function(*self.args, **self.kwargs)
t = RepeatTimer(2, hello, 5)
TypeError: __init__() missing 2 required positional arguments: 'interval' and 'function'
I think I'm struggling with creating a subclass of Timer. Suggestions welcomed?