Ensure files are closed

This commit is contained in:
Nicolas Mowen 2024-07-08 17:15:07 -06:00
parent 42be7efde4
commit f24ba6bfc1
3 changed files with 9 additions and 9 deletions

View File

@ -127,6 +127,7 @@ def output_frames(
preview_recorders[camera].write_data(
current_tracked_objects, motion_boxes, frame_time, frame
)
frame_manager.close(frame_id)
move_preview_frames("clips")

View File

@ -687,14 +687,14 @@ class DictFrameManager(FrameManager):
class SharedMemoryFrameManager(FrameManager):
def __init__(self):
self.shm_store = {}
self.shm_store: dict[str, shared_memory.SharedMemory] = {}
def create(self, name, size) -> AnyStr:
def create(self, name: str, size) -> AnyStr:
shm = shared_memory.SharedMemory(name=name, create=True, size=size)
self.shm_store[name] = shm
return shm.buf
def get(self, name, shape):
def get(self, name: str, shape):
if name in self.shm_store:
shm = self.shm_store[name]
else:
@ -702,18 +702,16 @@ class SharedMemoryFrameManager(FrameManager):
self.shm_store[name] = shm
return np.ndarray(shape, dtype=np.uint8, buffer=shm.buf)
def close(self, name):
def close(self, name: str):
if name in self.shm_store:
self.shm_store[name].close()
del self.shm_store[name]
def delete(self, name):
def delete(self, name: str):
if name in self.shm_store:
self.shm_store[name].close()
self.shm_store[name].unlink()
del self.shm_store[name]
else:
logger.error(f"Could not delete {name} the store is {self.shm_store}")
def create_mask(frame_shape, mask):

View File

@ -109,7 +109,7 @@ def capture_frames(
skipped_eps = EventsPerSecond()
skipped_eps.start()
shm_count = max(10, config.detect.fps * 2)
shm_count = 5
shm_frames: list[str] = []
while True:
@ -128,6 +128,8 @@ def capture_frames(
expired_frame_name = shm_frames.pop(0)
frame_manager.delete(expired_frame_name)
except Exception:
frame_manager.delete(frame_name)
# shutdown has been initiated
if stop_event.is_set():
break
@ -150,7 +152,6 @@ def capture_frames(
except queue.Full:
# if the queue is full, skip this frame
skipped_eps.update()
frame_manager.delete(frame_name)
class CameraWatchdog(threading.Thread):