我尝试使用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]上等待,因为=&gt;交易(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE,Resources = 1]&lt; - [:HELD_BY] - RWLock [SchemaLock]&lt; - [:WAITING_FOR] - 交易(15233,所有者:“qtp1927594840-9503” )[STATUS_ACTIVE,Resources = 1]&lt; - [:HELD_BY] - RWLock [SchemaLock]'。
如果标签存在与否,它没有区别,请求通常会失败。
答案 0 :(得分:1)
从详细信息部分中的死锁图表来看,这看起来像2.0.1中的错误。除了运行此特定查询之外,您是否正在对数据库执行任何其他操作,或者这只是启动新数据库并运行您提供的代码?
在任何情况下,由于它在Neo4j浏览器中工作,我建议交换使用事务API,因为这是浏览器使用的。 Py2neo使用此处记录的“Cypher Transactions”功能支持此功能: