summaryrefslogtreecommitdiff
path: root/state_tracker.py
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2021-11-17 22:14:37 -0800
committerScott Gasch <[email protected]>2021-11-17 22:14:37 -0800
commit6f688ff9bacee93679f6af45a301b4308e19764c (patch)
tree1cb708f34fdabc9d850c35d8a77fc73ac8192c9d /state_tracker.py
parent3f4818bf9d1f3071c4e2906896d422810b5776bc (diff)
WaitableState thingy and some stuff in the ML world.
Diffstat (limited to 'state_tracker.py')
-rw-r--r--state_tracker.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/state_tracker.py b/state_tracker.py
index 11ce4c3..4f77ff4 100644
--- a/state_tracker.py
+++ b/state_tracker.py
@@ -4,6 +4,7 @@ from abc import ABC, abstractmethod
import datetime
import logging
import time
+import threading
from typing import Dict, Optional
import pytz
@@ -112,7 +113,7 @@ class AutomaticStateTracker(StateTracker):
logger.debug('pace_maker noticed event; shutting down')
return
self.heartbeat()
- logger.debug(f'page_maker is sleeping for {self.sleep_delay}s')
+ logger.debug(f'pace_maker is sleeping for {self.sleep_delay}s')
time.sleep(self.sleep_delay)
def __init__(
@@ -144,3 +145,32 @@ class AutomaticStateTracker(StateTracker):
self.should_terminate.set()
self.updater_thread.join()
logger.debug('Background thread terminated.')
+
+
+class WaitableAutomaticStateTracker(AutomaticStateTracker):
+
+ def __init__(
+ self,
+ update_ids_to_update_secs: Dict[str, float],
+ *,
+ override_sleep_delay: Optional[float] = None,
+ ) -> None:
+ self._something_changed = threading.Event()
+ super().__init__(update_ids_to_update_secs,
+ override_sleep_delay=override_sleep_delay)
+
+ def something_changed(self):
+ self._something_changed.set()
+
+ def did_something_change(self) -> bool:
+ return self._something_changed.is_set()
+
+ def reset(self):
+ self._something_changed.clear()
+
+ def wait(self,
+ *,
+ timeout=None):
+ return self._something_changed.wait(
+ timeout=timeout
+ )