随机 SocketError/连接被拒绝错误在py2neo查询中

2024-05-20 01:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

别把希望寄托在琐碎的事情上。在

我的堆栈的相关部分是Gunicorn/Celery、neomodel(0.3.6)和py2neo(1.5)。Neo4j版本是1.9.4,绑定在0.0.0.0:7474上(所有这些都是在linux上,我想是ubuntu13.04)

所以我的gunicorn/celery服务器大部分时间都很好,但偶尔会出现以下错误:

ConnectionRefusedError(111, 'Connection refused')

Stacktrace (most recent call last):
  File "flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "flask/_compat.py", line 33, in reraise
    raise value
  File "flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "Noomsa/web/core/util.py", line 156, in inner
    user = UserMixin().get_logged_in()
  File "Noomsa/web/core/util.py", line 117, in get_logged_in
    user = models.User.index.get(username=flask.session["user"])
  File "neomodel/index.py", line 50, in get
    nodes = self.search(query=query, **kwargs)
  File "neomodel/index.py", line 41, in search
    return [self.node_class.inflate(n) for n in self._execute(str(query))]
  File "neomodel/index.py", line 28, in _execute
    return self.__index__.query(query)
  File "py2neo/neo4j.py", line 2044, in query
    self.__uri__, quote(query, "")
  File "py2neo/rest.py", line 430, in _send
    raise SocketError(err)

因此,如您所见,我调用User.index.get(请求响应中的第一个调用),并得到一个套接字错误。有时候。最美好的时光。错误发生在使用neo4j连接的所有Flask视图/Celery任务中(而不仅仅是执行User.index.get;)。在

到目前为止,我所采取的步骤包括moneky修补neomodel连接函数,检查每个线程是否创建了GraphDatabaseService对象,并每隔30秒左右自动重新连接(并验证)到neo4j服务器。这可能减少了错误发生的频率,但它们仍然会发生。在

在网上查找错误时,似乎大多数人试图连接到错误的接口/ip/端口。然而,考虑到我的大部分请求都通过了,我觉得这里不是这样。在

有什么想法吗?我不认为这是相关的,但我的数据库似乎有38k个孤立节点;这本身可能值得另一个问题。在

编辑:我应该补充一点,当使用workers=1而不是{}运行gunicorn/celery时,这种情况似乎消失了。看不出它为什么重要,因为显然neo4j默认设置为处理$N_CPU*10连接。在


Tags: inpyselfappflaskgetindexrequest
1条回答
网友
1楼 · 发布于 2024-05-20 01:32:34

这看起来像是一个网络或web堆栈配置问题,所以我认为从py2neo的角度看我无能为力。我建议升级到py2neo1.6,因为客户端HTTP代码已经被完全重写,它可能会更优雅地处理重新连接。在

相关问题 更多 >