diff --git a/core/storage/license_plate.py b/core/storage/license_plate.py index b0c7194..4c5b703 100644 --- a/core/storage/license_plate.py +++ b/core/storage/license_plate.py @@ -99,11 +99,13 @@ class LicensePlateManager: async def _listen_for_messages(self): """Listen for messages on the license_results channel.""" + listen_generator = None try: if not self.pubsub: return - async for message in self.pubsub.listen(): + listen_generator = self.pubsub.listen() + async for message in listen_generator: if message['type'] == 'message': try: # Log the raw message from Redis channel @@ -121,8 +123,20 @@ class LicensePlateManager: except asyncio.CancelledError: logger.info("License plate subscription task cancelled") + # Properly close the async generator + if listen_generator is not None: + try: + await listen_generator.aclose() + except Exception as e: + logger.debug(f"Error closing listen generator: {e}") except Exception as e: logger.error(f"Error in license plate message listener: {e}", exc_info=True) + # Properly close the async generator on error + if listen_generator is not None: + try: + await listen_generator.aclose() + except Exception as e: + logger.debug(f"Error closing listen generator: {e}") async def _process_license_plate_result(self, data: Dict[str, Any]): """ diff --git a/requirements.base.txt b/requirements.base.txt index af22160..094f332 100644 --- a/requirements.base.txt +++ b/requirements.base.txt @@ -4,4 +4,5 @@ ultralytics opencv-python scipy filterpy -psycopg2-binary \ No newline at end of file +psycopg2-binary +lap>=0.5.12 \ No newline at end of file