我可以在 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
实际上只是常规 AiohttpTransport
的 lambda
包装器,call_from_event_loop
参数设置为 True
.
这个额外的配置告诉 Gremlin Python 客户端应用适当的内部更改来嵌套事件循环。
我知道图形笔记本项目允许使用魔法命令提交 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
实际上只是常规 AiohttpTransport
的 lambda
包装器,call_from_event_loop
参数设置为 True
.
这个额外的配置告诉 Gremlin Python 客户端应用适当的内部更改来嵌套事件循环。