import threading, time class WatchDog(): def __init__(self, timeout, bark_fn, interval=3, msg="") -> None: self.last_feed = None self.timeout = timeout self.bark_fn = bark_fn self.interval = interval self.msg = msg self.kill_dog = False def watch(self): while True: if self.kill_dog: break if time.time() - self.last_feed > self.timeout: if len(self.msg) > 0: print(self.msg) self.bark_fn() break time.sleep(self.interval) def begin_watch(self): self.last_feed = time.time() th = threading.Thread(target=self.watch) th.daemon = True th.start() def feed(self): self.last_feed = time.time()