diff --git a/lightrag/lightrag.py b/lightrag/lightrag.py index cec21b2f..6511e61b 100644 --- a/lightrag/lightrag.py +++ b/lightrag/lightrag.py @@ -52,15 +52,28 @@ from .kg.oracle_impl import OracleKVStorage, OracleGraphStorage, OracleVectorDBS def always_get_an_event_loop() -> asyncio.AbstractEventLoop: + """ + Ensure that there is always an event loop available. + + This function tries to get the current event loop. If the current event loop is closed or does not exist, + it creates a new event loop and sets it as the current event loop. + + Returns: + asyncio.AbstractEventLoop: The current or newly created event loop. + """ try: - return asyncio.get_event_loop() + # Try to get the current event loop + current_loop = asyncio.get_event_loop() + if current_loop._closed: + raise RuntimeError("Event loop is closed.") + return current_loop except RuntimeError: + # If no event loop exists or it is closed, create a new one logger.info("Creating a new event loop in main thread.") - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - - return loop + new_loop = asyncio.new_event_loop() + asyncio.set_event_loop(new_loop) + return new_loop @dataclass