function was returning a closed event loop.
This commit is contained in:
Tasha Upchurch
2024-11-29 13:27:08 -07:00
committed by GitHub
parent f3fe5d3b64
commit f0ea55d709

View File

@@ -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