我尝试使用py2neo1.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中引发死锁错误:
已检测到并避免了死锁情况。这意味着持有锁的两个或多个事务想要等待彼此持有的锁,这将导致这些事务之间出现死锁。这个异常被抛出,而不是以死锁结束。在
有关如何避免这种情况,请参阅Neo4j手册中的死锁部分:http://docs.neo4j.org/chunked/stable/transactions-deadlocks.html
Details:'事务(15438,所有者:“qtp1927594840-9525”)[STATUS\u ACTIVE,Resources=1]无法等待资源RWLock[SchemaLock],因为=>;事务(15438,所有者:“qtp1927594840-9525”)[状态\u活动,资源=1]<;-[:持有者]-RWLock[SchemaLock]<;-[:等待]-事务(15233,所有者:“qtp1927594840-9503”)[状态\u活动,Resources=1]<;-[:由]-RWLock[SchemaLock]'持有。在
不管标签是否存在,请求通常都会失败。在
从details部分的死锁图来看,这看起来像是2.0.1中的一个bug。除了运行这个特定的查询之外,您是否对数据库做了其他操作,或者这只是启动一个新的数据库并运行您提供的代码?在
在任何情况下,因为它在Neo4j浏览器中工作,所以我建议交换使用事务性api,因为这正是浏览器所使用的。Py2neo使用“Cypher事务”功能支持此功能,记录如下:
http://book.py2neo.org/en/latest/cypher/#id2
相关问题 更多 >
编程相关推荐