Merge pull request #354 from TashaSkyUp/patch-1

fix for #209
This commit is contained in:
zrguo
2024-12-02 15:53:08 +08:00
committed by GitHub

View File

@@ -52,15 +52,28 @@ from .kg.oracle_impl import OracleKVStorage, OracleGraphStorage, OracleVectorDBS
def always_get_an_event_loop() -> asyncio.AbstractEventLoop: 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: 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: 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.") logger.info("Creating a new event loop in main thread.")
loop = asyncio.new_event_loop() new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop) asyncio.set_event_loop(new_loop)
return new_loop
return loop
@dataclass @dataclass