Improve slow startup times. #126

This commit is contained in:
Ian Renton
2026-08-10 21:25:52 +01:00
parent c687202a61
commit d5d91ef50e
6 changed files with 32 additions and 28 deletions
@@ -32,6 +32,7 @@ class FileDownloadSIGRefDataProvider(SIGRefDataProvider):
self._thread.start()
def stop(self):
super().stop()
self._stop_event.set()
def _run(self):
@@ -12,7 +12,6 @@ class LocalFileSIGRefDataProvider(SIGRefDataProvider):
def __init__(self, sig, provider_config, path):
super().__init__(sig, provider_config)
self._path = path
self._stop = False
def start(self):
logging.debug("Loading " + self.sig_name + " SIG ref data from file.")
@@ -29,9 +28,6 @@ class LocalFileSIGRefDataProvider(SIGRefDataProvider):
self.status = "Error"
logging.error("Exception in local file SIG Ref Data Provider (" + self.sig_name + ")", e, exc_info=True)
def stop(self):
self._stop = True
def _file_to_data(self, path):
"""Load a file on the given path and turn it into SIG Ref data."""
+11 -2
View File
@@ -17,6 +17,7 @@ class SIGRefDataProvider:
self.last_update_time = datetime.min.replace(tzinfo=pytz.UTC)
self.status = "Not Started" if self.enabled else "Disabled"
self.reference_count = 0
self._stop = False
def start(self):
@@ -26,14 +27,22 @@ class SIGRefDataProvider:
def stop(self):
"""Stop any threads and prepare for application shutdown"""
"""Stop any threads and prepare for application shutdown. Subclasses should implement this method and call
super()."""
raise NotImplementedError("Subclasses must implement this method")
self._stop = True
def _add_data(self, new_data):
"""Add all the provided reference data objects to the data store."""
for d in new_data:
DATA_STORE.sigrefs[self.sig_name + ":" + d.id] = d
# For the big data sources, loading will take a few minutes. If we want to shut down the software neatly
# within the first few minutes of startup, we need a way to abort this expensive process of filling up the
# disk cache.
if self._stop:
break
self.reference_count = len(new_data)
logging.info(f"Loaded %d references for %s into the data store.", self.reference_count, self.sig_name)