event loop handling

This commit is contained in:
2025-11-08 00:25:09 +08:00
parent ac535ce26b
commit 1699b12f5b

View File

@@ -44,12 +44,32 @@ class ClientToolManager:
return tools
def get_tools(self):
tools = asyncio.run(self.aget_tools())
return tools
try:
loop = asyncio.get_running_loop()
# Event loop is already running, we need to run in a thread
import concurrent.futures
def run_in_thread():
# Create a new event loop in this thread
new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(new_loop)
try:
return new_loop.run_until_complete(self.aget_tools())
finally:
new_loop.close()
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(run_in_thread)
tools = future.result()
return tools
except RuntimeError:
# No event loop running, safe to use asyncio.run()
tools = asyncio.run(self.aget_tools())
return tools
if __name__ == "__main__":
# NOTE: Simple test
config = ClientToolManagerConfig()
tool_manager = ClientToolManager(config)
tools = tool_manager.get_tools()
print(tools)
[print(e.name) for e in tools]