Sfoglia il codice sorgente

do not crash while sending from outbox

Rodja Trappe 2 anni fa
parent
commit
1a0277f6c0
1 ha cambiato i file con 16 aggiunte e 9 eliminazioni
  1. 16 9
      nicegui/outbox.py

+ 16 - 9
nicegui/outbox.py

@@ -30,12 +30,19 @@ async def loop() -> None:
             await asyncio.sleep(0.01)
             continue
         coros = []
-        for client_id, elements in update_queue.items():
-            elements = {element_id: element.to_dict() for element_id, element in elements.items()}
-            coros.append(globals.sio.emit('update', elements, room=client_id))
-        update_queue.clear()
-        for client_id, message_type, data in message_queue:
-            coros.append(globals.sio.emit(message_type, data, room=client_id))
-        message_queue.clear()
-        for coro in coros:
-            await coro
+        try:
+            for client_id, elements in update_queue.items():
+                elements = {element_id: element.to_dict() for element_id, element in elements.items()}
+                coros.append(globals.sio.emit('update', elements, room=client_id))
+            update_queue.clear()
+            for client_id, message_type, data in message_queue:
+                coros.append(globals.sio.emit(message_type, data, room=client_id))
+            message_queue.clear()
+            for coro in coros:
+                try:
+                    await coro
+                except Exception:
+                    globals.logger.exception('Error in outbox loop (awaiting coro)')
+        except Exception:
+            globals.logger.exception('Error in outbox loop')
+            await asyncio.sleep(0.1)