def run(self): "A simple loop checking for changes to the attribute list" # "batching" the updates should be more efficient than # reacting immediately, especially when listeners can come and # go quite frequently. while not self.stopped.is_set(): sleep(self.period) if self._attributes: attributes, self._attributes = self._attributes, CaselessList() with self.lock: self._update(attributes)
def __init__(self, event_callback, unsubscribe_callback, period=0.5): QtCore.QThread.__init__(self) self.listeners = CaselessDict() self.inverse_listeners = {} self.event_callback = event_callback self.unsubscribe_callback = unsubscribe_callback self.period = period self._attributes = CaselessList() self._config = CaselessDict() self._last_event = TTLDict(default_ttl=10) self.attribute_validator = TangoAttributeNameValidator() self.device_validator = TangoDeviceNameValidator() self.eval_validator = EvaluationAttributeNameValidator() self.lock = Lock() self.stopped = Event()