From b682d835d058db14a599ccd72eb4a175f90488c4 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Sun, 2 Jul 2023 03:12:13 +0300 Subject: [PATCH] Refactor put and get methods in LimitedQueue to handle queue size and blocking behavior more efficiently --- frigate/util.py | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/frigate/util.py b/frigate/util.py index 8429b5b33..be87bfd73 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -1300,28 +1300,25 @@ class LimitedQueue(FFQueue): self.size = multiprocessing.RawValue( ctypes.c_int, 0 ) # Add a counter for the number of items in the queue - self.lock = multiprocessing.Lock() # Add a lock def put(self, x, block=True, timeout=DEFAULT_TIMEOUT): - with self.lock: # Acquire the lock - if self.maxsize > 0 and self.size.value >= self.maxsize: - if block: - start_time = time.time() - while self.size.value >= self.maxsize: - remaining = timeout - (time.time() - start_time) - if remaining <= 0.0: - raise Full - time.sleep(min(remaining, 0.1)) - else: - raise Full - self.size.value += 1 + if self.maxsize > 0 and self.size.value >= self.maxsize: + if block: + start_time = time.time() + while self.size.value >= self.maxsize: + remaining = timeout - (time.time() - start_time) + if remaining <= 0.0: + raise Full + time.sleep(min(remaining, 0.1)) + else: + raise Full + self.size.value += 1 return super().put(x, block=block, timeout=timeout) def get(self, block=True, timeout=DEFAULT_TIMEOUT): - with self.lock: # Acquire the lock - if self.size.value <= 0 and not block: - raise Empty - self.size.value -= 1 + if self.size.value <= 0 and not block: + raise Empty + self.size.value -= 1 return super().get(block=block, timeout=timeout) def qsize(self):