From 10214dfdda94f917b104ac079fbe77cefceadc8e Mon Sep 17 00:00:00 2001 From: Robert Sachunsky Date: Wed, 11 Mar 2026 02:38:11 +0100 Subject: [PATCH] predictor: make sure all shared arrays get freed eventually --- src/eynollah/predictor.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/eynollah/predictor.py b/src/eynollah/predictor.py index 1b0e970..31452dc 100644 --- a/src/eynollah/predictor.py +++ b/src/eynollah/predictor.py @@ -95,11 +95,13 @@ class Predictor(mp.context.SpawnProcess): self.logger.exception("setup failed") self.stopped.set() closing = {} - while not self.stopped.is_set(): + def close_all(): for jobid in list(self.closable): self.closable.remove(jobid) closing.pop(jobid).close() #self.logger.debug("closed shm for '%d'", jobid) + while not self.stopped.is_set(): + close_all() try: jobid, model, shared_data = self.taskq.get(timeout=1.1) except mp.queues.Empty: @@ -124,6 +126,7 @@ class Predictor(mp.context.SpawnProcess): result = e self.resultq.put((jobid, result)) #self.logger.debug("sent result for '%d'", jobid) + close_all() #self.logger.debug("predictor terminated") def load_models(self, *loadable: List[str]):