TinkerPop 文档描述了 Python 的 GLV。但是,其中提供的示例是围绕同步代码构建的。有一个aiogremlin库被设计用来在 Python 的 asyncio 代码中使用 Gremlin。不幸的是,该项目似乎已停止。
官方 GLV 是否支持 asyncio 或者有没有办法在异步 Python 应用程序中使用 Gremlin?
TinkerPop 文档描述了 Python 的 GLV。但是,其中提供的示例是围绕同步代码构建的。有一个aiogremlin库被设计用来在 Python 的 asyncio 代码中使用 Gremlin。不幸的是,该项目似乎已停止。
官方 GLV 是否支持 asyncio 或者有没有办法在异步 Python 应用程序中使用 Gremlin?
我注意到这个问题一直没有答案,所以这里......
今天的 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 之类的东西。
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)