我正在使用以下版本的neo4j库:
neo4j==1.7.2
neobolt==1.7.9
neotime==1.7.4
我有一个flask应用程序,在开发中我使用内部flask应用服务器。(在prod中,我将使用一个带有uwsgi的docker容器,但是这个问题是关于我的dev设置的。)
我将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
此设置可以运行一段时间,但有时会出现以下错误:
neobolt.exceptions.ServiceUnavailable: Failed to read from defunct connection Address(host='127.0.0.1',
port=7687)
当我简单地重试请求时,它会在第二次工作。我已经阅读了错误消息,发现了多篇关于多线程和多进程环境中neo4j的帖子,但我不相信它们与我有关。你知道吗
提交execute函数时出错。我传递给它的queryFN是一个非常简单的单行程序,几乎不需要时间来执行。你知道吗
我的应用程序只有一个驱动程序实例是错误的吗?(我认为这样做是因为驱动程序创建了一个连接池,而且我的应用程序有一个连接池是合理的。)
建议使用neo4j和烧瓶的方法是什么? 我已经看过这个例子https://github.com/neo4j-examples/movies-python-bolt/blob/master/movies.py,但它们只是以与我相同的方式拥有一个驱动程序对象。(除了在类中不是全局的,但在功能上我的是相同的。)
我应该在哪里调试这个问题?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐