我可以在 Jupyter notebook 中使用 Gremlin Python 客户端并避免事件循环错误吗?

Can I use the Gremlin Python client in a Jupyter notebook and avoid event loop errors?

我知道图形笔记本项目允许使用魔法命令提交 Gremlin 查询。但是,有时我需要在 Python 中编写代码并使用代码从常规 Jupyter 笔记本单元中连接到服务器。如果,使用 Gremlin Python 3.5.2 客户端,我尝试做这样的事情:

server = '<your server endpoint goes here>'
port = 8182

endpoint = f'wss://{server}:{port}/gremlin'

connection = DriverRemoteConnection(endpoint,'g')

g = traversal().withRemote(connection)

抛出错误,因为 Jupyter 事件循环已经 运行。

有解决办法吗?

创建远程连接时可以指定一个附加参数,告诉 Python 客户端嵌套事件循环。您只需要按照以下方式创建连接:

server = '<your server endpoint goes here>'
port = 8182

endpoint = f'wss://{server}:{port}/gremlin'
print(endpoint)

connection = DriverRemoteConnection(endpoint,'g',
                 transport_factory=lambda:AiohttpTransport(call_from_event_loop=True))

g = traversal().withRemote(connection)

主要区别在于提供的自定义 transport_factory 实际上只是常规 AiohttpTransportlambda 包装器,call_from_event_loop 参数设置为 True.

这个额外的配置告诉 Gremlin Python 客户端应用适当的内部更改来嵌套事件循环。