29 lines
		
	
	
		
			793 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			793 B
		
	
	
	
		
			Python
		
	
	
	
	
	
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()
 |