Gremlin docker 服务器连接不工作
Gremlin docker server connection not working
我正在 运行使用官方 docker 容器安装一个 gremlin 服务器:
docker run --rm -it -p 8182:8182 --name gremlin tinkerpop/gremlin-server
然后我尝试从主机运行以下脚本:
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
if __name__ == "__main__":
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182', 'g'))
g.V().drop()
g.V().addV('person')
l = g.V().hasLabel('person')
print(l.toList())
连接似乎有效(没有错误),但查询似乎并未实际执行(gremlin 服务器统计显示没有任何调用)。
更奇怪的是 toList()
调用会阻止执行,而 returns 什么也不会。如果我停止 docker 容器,python 端的连接就会断开。
我正在使用 gremlin 服务器的默认设置。
有人可以帮助我了解发生了什么吗?
编辑:我还尝试将 gremlin 配置主机更改为 0.0.0.0。
编辑:所以看起来只有 toList
等待答案的原因是因为其他查询尚未实际执行,您需要 .next()
.
原来有两个错误:
- 地址必须以
/gremlin
结尾,所以在我的例子中是'ws://localhost:8182/gremlin'
- 尝试此操作时,出现异常,起初看起来像是连接错误:
RuntimeError: Event loop is closed
Exception ignored in: <function ClientResponse.__del__ at 0x7fb532031af0>
Traceback (most recent call last):
[..]
File "/usr/lib/python3.8/asyncio/selector_events.py", line 692, in close
File "/usr/lib/python3.8/asyncio/base_events.py", line 719, in call_soon
File "/usr/lib/python3.8/asyncio/base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
这其实不是连接错误,而是连接没有正确关闭的警告。如果您进行调查,您会注意到实际上执行了查询。处理这个问题的正确方法是按照以下行写一些东西:
conn = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
g = traversal().withRemote(conn)
[do your graph operations]
conn.close()
有了这个,无一例外,生活都是美好的。我很惊讶这在没有文档中出现。
我正在 运行使用官方 docker 容器安装一个 gremlin 服务器:
docker run --rm -it -p 8182:8182 --name gremlin tinkerpop/gremlin-server
然后我尝试从主机运行以下脚本:
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
if __name__ == "__main__":
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182', 'g'))
g.V().drop()
g.V().addV('person')
l = g.V().hasLabel('person')
print(l.toList())
连接似乎有效(没有错误),但查询似乎并未实际执行(gremlin 服务器统计显示没有任何调用)。
更奇怪的是 toList()
调用会阻止执行,而 returns 什么也不会。如果我停止 docker 容器,python 端的连接就会断开。
我正在使用 gremlin 服务器的默认设置。 有人可以帮助我了解发生了什么吗?
编辑:我还尝试将 gremlin 配置主机更改为 0.0.0.0。
编辑:所以看起来只有 toList
等待答案的原因是因为其他查询尚未实际执行,您需要 .next()
.
原来有两个错误:
- 地址必须以
/gremlin
结尾,所以在我的例子中是'ws://localhost:8182/gremlin'
- 尝试此操作时,出现异常,起初看起来像是连接错误:
RuntimeError: Event loop is closed
Exception ignored in: <function ClientResponse.__del__ at 0x7fb532031af0>
Traceback (most recent call last):
[..]
File "/usr/lib/python3.8/asyncio/selector_events.py", line 692, in close
File "/usr/lib/python3.8/asyncio/base_events.py", line 719, in call_soon
File "/usr/lib/python3.8/asyncio/base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
这其实不是连接错误,而是连接没有正确关闭的警告。如果您进行调查,您会注意到实际上执行了查询。处理这个问题的正确方法是按照以下行写一些东西:
conn = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
g = traversal().withRemote(conn)
[do your graph operations]
conn.close()
有了这个,无一例外,生活都是美好的。我很惊讶这在没有文档中出现。