【发布时间】:2020-01-22 15:56:01
【问题描述】:
我从事的项目需要通过 py2neo 快速将大量信息播放到 Neo4J 中,而我在尝试使用 Python 的多处理库来加快该过程时遇到了障碍。
一般来说,我们正在做的是双重的,两个部分同时发生:
第 1 部分:
- 在一对节点 (A->B) 之间创建关系
- 创建另一个节点,该节点与前一对(C->A,C->B)中的每一个都有一个关系
- 将所有 3 个节点及其关系推送到 Neo4j 中,
- 将节点 C 的 ID 推送到 kafka 主题
第 2 部分:
- 通过python的多处理创建N个“线程”,都打开自己的kafka消费者
- 消费者阅读主题,并执行可能更新关系/节点或创建其他关系/节点的代码。
出现的问题发生在第 2 部分,特别是在更新或创建关系或节点时。 py2neo 正在抛出一个py2neo.database.TransientError,根据文档,它是:
数据库目前无法为请求提供服务,稍后重试可能会产生成功结果。
我已尝试添加安全检查,该检查将重试事务 X 次,并在 X 次尝试失败后将其重新推送到 kafka 主题以供另一个线程尝试,但最终结果仍然不正确。
我对多线程/多处理一无所知,所以我觉得我最初的研究工作已经严重偏离基础,我浪费了很多周期来试图解决这个问题——任何方向或洞察力不胜感激。
如有必要,可以提供更多信息——不确定我可能遗漏了什么。
谢谢
【问题讨论】: