7

TinkerPop 文档描述了 Python 的 GLV。但是,其中提供的示例是围绕同步代码构建的。有一个aiogremlin库被设计用来在 Python 的 asyncio 代码中使用 Gremlin。不幸的是,该项目似乎已停止。

官方 GLV 是否支持 asyncio 或者有没有办法在异步 Python 应用程序中使用 Gremlin?

4

2 回答 2

1

我注意到这个问题一直没有答案,所以这里......

今天的 Gremlin Python 客户端使用 Tornado。将来可能会改变为仅使用 aiohttp。让事件循环很好地协同工作可能很棘手。我发现最简单的方法是使用 nest-asyncio 库。安装后,您可以编写类似这样的内容。我没有显示g正在创建的内容,但此代码假定已建立与服务器的连接,即g图形遍历源。

import nest_asyncio
nest_asyncio.apply() 

async def count_airports():
    c = g.V().hasLabel('airport').count().next()  
    print(c)

async def run_tests(g):
    await count_airports() 
    return

asyncio.run(run_tests(g))     

正如您所提到的,另一种选择是使用 aiogremlin 之类的东西。

于 2021-04-13T14:55:21.623 回答
0

gremlin 库的任何最新版本都支持异步代码,但实现似乎并不直接,因为 gremlinAsync 使用未来的查询(未来文档

为了使其易于阅读和实现,您可以将 gremlin API 返回的 Future 对象转换为支持 await 语法的协程

async def get_result(query, client):
    result = await asyncio.wrap_future(client.submitAsync(query))
    return result 

client = gremlin_connection(environ.get("url"),environ.get("username"),environ.get("password"))
data = await get_result(query1, client)
于 2022-02-23T07:08:01.203 回答