fix(AcsSignal) force update before subscribing
This commit is contained in:
@@ -149,10 +149,22 @@ class AcsSignal(SocketSignal):
|
||||
self.controller.set_var(self.tag, convert(v), self.prec, i)
|
||||
|
||||
def subscribe(self, callback, event_type=None, run=True):
|
||||
# logger.info(f"subscribe to signal {self.tag} called from: {traceback.format_stack()}")
|
||||
self._ensure_polling()
|
||||
cid = super().subscribe(callback, event_type=event_type, run=run)
|
||||
return cid
|
||||
if run:
|
||||
self._force_fresh_read()
|
||||
return super().subscribe(callback, event_type=event_type, run=run)
|
||||
|
||||
def _force_fresh_read(self):
|
||||
old_value = self._readback
|
||||
try:
|
||||
new_value = self._socket_get()
|
||||
except Exception as e:
|
||||
logger.warning(f"Fresh read failed for {self.name} during subscribe() with {e}")
|
||||
return
|
||||
self._readback = new_value
|
||||
self._run_subs(
|
||||
sub_type=self.SUB_VALUE, old_value=old_value, value=new_value, timestamp=time.time()
|
||||
)
|
||||
|
||||
def clear_sub(self, cb, event_type=None):
|
||||
super().clear_sub(cb, event_type=event_type)
|
||||
@@ -173,18 +185,13 @@ class AcsSignal(SocketSignal):
|
||||
old_value = self._readback
|
||||
try:
|
||||
new_value = self._socket_get()
|
||||
except Exception as e:
|
||||
logger.warning(f"During polling acs signal, got exception {e}")
|
||||
except Exception:
|
||||
time.sleep(self._poll_time)
|
||||
continue
|
||||
if new_value != old_value:
|
||||
self._readback = new_value
|
||||
self._run_subs(
|
||||
sub_type=self.SUB_VALUE,
|
||||
old_value=old_value,
|
||||
value=new_value,
|
||||
timestamp=time.time(),
|
||||
)
|
||||
self._readback = new_value
|
||||
self._run_subs(
|
||||
sub_type=self.SUB_VALUE, old_value=old_value, value=new_value, timestamp=time.time()
|
||||
)
|
||||
time.sleep(self._poll_time)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user