1

我尝试使用 py2neo 1.6.2 和 neo4j 2.0.1 使用 Cypher 查询创建索引:

graph_db = neo4j.GraphDatabaseService()
query = "CREATE INDEX ON :Label(prop)"
neo4j.CypherQuery(graph_db, query).run()

该查询在 neo4j Web 界面中运行良好,但在 py2neo 中引发死锁错误:


py2neo.neo4j.DeadlockDetectedException:不要惊慌。

已检测到并避免了死锁情况。这意味着两个或多个持有锁的事务想要等待彼此持有的锁,这将导致这些事务之间的死锁。这个异常被抛出而不是最终陷入死锁。

有关如何避免这种情况,请参阅 Neo4j 手册中的死锁部分:http: //docs.neo4j.org/chunked/stable/transactions-deadlocks.html

详细信息:'事务(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE,Resources=1] 无法等待资源 RWLock[SchemaLock],因为 => 事务(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE, Resources=1] <-[:HELD_BY]- RWLock[SchemaLock] <-[:WAITING_FOR]- Transaction(15233, owner:"qtp1927594840-9503")[STATUS_ACTIVE,Resources=1] <-[:HELD_BY]- RWLock[架构锁]'。


标签是否存在都没有关系,请求通常会失败。

4

1 回答 1

1

从细节部分的死锁图来看,这看起来像是 2.0.1 中的一个 bug。除了运行此特定查询之外,您是否对数据库执行其他任何操作,或者这只是启动一个新数据库并运行您提供的代码?

无论如何,由于它在 Neo4j 浏览器中工作,我建议交换使用事务 API,因为这是浏览器使用的。Py2neo 使用“Cypher Transactions”功能支持这一点,记录在这里:

http://book.py2neo.org/en/latest/cypher/#id2

于 2014-03-10T14:08:43.467 回答