def __init__(self, **kwargs):
     threading.Thread.__init__(self)
     #self.timeout = kwargs.get('timeout', .001)
     self.callback = kwargs.get('callback')
     self.running = True
     self.needs_update = threading.Event()
     self.auto_update_timer = RepeatTimer(3.0, self.on_update_request)
class DMXTimeout(threading.Thread):
    def __init__(self, **kwargs):
        threading.Thread.__init__(self)
        #self.timeout = kwargs.get('timeout', .001)
        self.callback = kwargs.get('callback')
        self.running = True
        self.needs_update = threading.Event()
        self.auto_update_timer = RepeatTimer(3.0, self.on_update_request)
        #self.start_timer()
        
    def run(self):
        self.auto_update_timer.start()
        while self.running:
            self.needs_update.wait()
            self.callback()
            self.needs_update.clear()
        self.auto_update_timer.cancel()
            
    def on_update_request(self, *args, **kwargs):
        self.needs_update.set()