From a4d88b8cd42d65d35ef227628e624bcc377a0a0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=E1=BB=B3nh=20Tri=E1=BB=87u=20V=C4=A9?= Date: Tue, 25 Feb 2025 04:16:22 +0700 Subject: [PATCH] fix this event loop is already running --- lightrag/lightrag.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/lightrag/lightrag.py b/lightrag/lightrag.py index 46638243..3e679888 100644 --- a/lightrag/lightrag.py +++ b/lightrag/lightrag.py @@ -404,16 +404,31 @@ class LightRAG: self._storages_status = StoragesStatus.CREATED - # Initialize storages if self.auto_manage_storages_states: - loop = always_get_an_event_loop() - loop.run_until_complete(self.initialize_storages()) + self._run_async_safely(self.initialize_storages, "Storage Initialization") def __del__(self): - # Finalize storages if self.auto_manage_storages_states: + self._run_async_safely(self.finalize_storages, "Storage Finalization") + + def _run_async_safely(self, async_func, action_name=""): + """Safely execute an async function, avoiding event loop conflicts.""" + try: loop = always_get_an_event_loop() - loop.run_until_complete(self.finalize_storages()) + if loop.is_running(): + task = loop.create_task(async_func()) + task.add_done_callback( + lambda t: logger.info(f"✅ {action_name} completed!") + ) + else: + loop.run_until_complete(async_func()) + except RuntimeError: + logger.warning( + f"No running event loop, creating a new loop for {action_name}." + ) + loop = asyncio.new_event_loop() + loop.run_until_complete(async_func()) + loop.close() async def initialize_storages(self): """Asynchronously initialize the storages"""