Rob*_*452 5 python neo4j flask bolt
我正在使用以下版本的 neo4j 库:
neo4j==1.7.2
neobolt==1.7.9
neotime==1.7.4
Run Code Online (Sandbox Code Playgroud)
我有一个烧瓶应用程序,在开发中我使用内部烧瓶应用程序服务器。(在 prod 中,我将使用带有 uwsgi 的 docker 容器,但这个问题与我的开发设置有关。)
我已将 neo4j 封装到一个类中,并且我的应用程序维护此类的单个实例:
class ChartStoreConnectionClass():
driver = None
def __init__(self, configDict):
self.driver = neo4j.GraphDatabase.driver(
configDict["boltUri"],
auth=(configDict["basicAuthUsername"], configDict["basicAuthPassword"]),
encrypted=True,
trust=neo4j.TRUST_SYSTEM_CA_SIGNED_CERTIFICATES,
# trust=neo4j.TRUST_ALL_CERTIFICATES,
# trust=neo4j.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES, Custom CA support is not implemented
)
def readonlyQuery(self, queryFN):
res = None
with self.driver.session() as session:
tx = session.begin_transaction()
res = queryFN(tx)
tx.rollback()
return res
def execute(self, queryFN):
res = None
with self.driver.session() as session:
tx = session.begin_transaction()
res = queryFN(tx)
tx.commit()
return res
Run Code Online (Sandbox Code Playgroud)
此设置可以使用一段时间,但有时会出现以下错误:
neobolt.exceptions.ServiceUnavailable: Failed to read from defunct connection Address(host='127.0.0.1',
port=7687)
Run Code Online (Sandbox Code Playgroud)
当我简单地重试请求时,它第二次工作。我已经阅读了错误消息并发现了多篇关于多线程与多进程环境中的 Neo4j 的帖子,但我认为它们与我无关。
执行函数的提交发生错误。我传递给它的 queryFN 是一个非常简单的单行代码,几乎不需要时间来执行。
我的应用程序只有一个驱动程序实例是错误的吗?(我认为这是这样做的方法,因为驱动程序创建了一个连接池,而且我的应用程序有一个连接池是有道理的。)
在 Flask 中使用 neo4j 的推荐方法是什么?我已经看到了这个例子https://github.com/neo4j-examples/movies-python-bolt/blob/master/movies.py但他们和我一样只有一个驱动程序对象。(除了不是在类内是全局的,但在功能上我的是相同的。)
我应该在哪里寻找调试这个问题?
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |