1、需要设置transport_factory
2、需要调用new_event_loop、get_running_loop以及set_event_loop函数
3、需要设置线程池pool,防止并发量过大导致访问数据库异常
import asyncio
import functools
from gremlin_python.driver.aiohttp.transport import AiohttpTransport
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
from gremlin_python.driver import client
from concurrent.futures import ThreadPoolExecutor
pool = ThreadPoolExecutor(max_workers=100)
def run1(g, loop):
asyncio.set_event_loop(loop)
return g.V().limit(3).toList()
def run2(g, loop):
asyncio.set_event_loop(loop)
return g.V().limit(2).toList()
async def run(g):
loop = asyncio.get_running_loop()
r1 = loop.run_in_executor(pool, functools.partial(run1, g, loop))
r2 = loop.run_in_executor(pool, functools.partial(run2, g, loop))
return {'run1': await r1, 'run2': await r2}
if __name__ == '__main__':
client = client.Client('ws://localhost:8182/gremlin', None, username='user', password='pass')
result_set = client.submit('GridGraphFactory.openGraph("db");g=graph.traversal();return;')
connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'gdb',
username='user', password='pass',
transport_factory=lambda: AiohttpTransport(call_from_event_loop=True))
g = traversal().withRemote(connection)
loop = asyncio.new_event_loop()
res = loop.run_until_complete(run(g))
loop.close()
print(res)
client.close()
connection.close()
Java异步调用则没有过多限制,只需要注意GraphTraversalSource g不是线程安全即可。
参考资料: