Here's a finished module, that will do what you want.
import threading class EventTimer: def __init__(self): self.t = None def add_event(self, func, days=0, hours=0, minutes=0, seconds=0): times = [days, hours, minutes, seconds] multiplier = [86400, 3600, 60, 1] count = 0 for n in range(len(times)): count += times[n] * multiplier[n] self.t = threading.Timer(count, func) def start_thread(self): self.t.start() def wait_for_finish(self, timeout=None): self.t.join(timeout) self.t = None class MyTimer(EventTimer): def __init__(self, max_iters=1, seconds=0): super().__init__() self.num_iterations_so_far = 0 self.max_iters = max_iters self.seconds = seconds def kick_off_event(self): self.add_event(self.event_triggered, seconds=self.seconds) self.start_thread() def event_triggered(self): self.max_iters -= 1 print('T minus {}'.format(self.max_iters)) if self.max_iters > 0: self.kick_off_event() def try_timer(): mte = MyTimer(max_iters=8, seconds=2) mte.kick_off_event() mte.wait_for_finish() if __name__ == '__main__: try_timer()