Python异步调用Gremlin(使用async)

14 篇文章 0 订阅
4 篇文章 0 订阅

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不是线程安全即可。

参考资料:

Spring之异步任务@Async详解分析-CSDN博客

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值