diff --git a/python/src/open_echo/web.py b/python/src/open_echo/web.py index 921fc89..9a7ac06 100644 --- a/python/src/open_echo/web.py +++ b/python/src/open_echo/web.py @@ -85,6 +85,7 @@ async def process_echo(self, echo: EchoPacket): async def run_forever(self): """Continuously read serial data and emit processed arrays. Supports live settings update and restart.""" + retry_delay = 1 # seconds; doubles on each consecutive failure up to 30s max while True: if self.settings is None: log.warning("Settings not initialized, waiting...") @@ -99,12 +100,15 @@ async def run_forever(self): async for pkt in reader: await self.process_echo(pkt) if self._restart_event.is_set(): - print("Restart event set, breaking loop") + log.info("Restart event set, breaking loop") break + retry_delay = 1 # reset backoff on clean exit + await self._restart_event.wait() except Exception as e: log.error(f"❌ Error in EchoReader: {e}", exc_info=e) - - await self._restart_event.wait() + log.info(f"Retrying in {retry_delay}s...") + await asyncio.sleep(retry_delay) + retry_delay = min(retry_delay * 2, 30) connection_manager = ConnectionManager()