我有一些Celery工作线程将他们的结果存储在MongoDB后端。这似乎运作良好。但是,我还需要将唯一的任务ID(以及其他一些任务结果元数据)存储在Neo4J图形数据库中。
我的主要目标是从 Neo4J 中引用任务结果,而不会用数千个结果将其弄乱。因此,Neo4J为任务结果提供了可视化功能。
我需要一些关于使用芹菜实现这一目标的最佳方法的建议。
以下是我一直在玩的一些选项:
- 使用 Celery 的子任务并创建由不同工作人员处理的单独任务,将数据发送到 Neo4J。
- 使用 Celery 的 HTTP 回调任务 (Webhooks) 将数据直接发布到 Neo4J 的 REST API
- 扩展主要任务以包括对 Neo4J 的 REST API 的调用
将调用 Neo4J
作为子任务排队可以提高任务的粒度,并权衡一致性(Neo4J 中的数据将赶上 MongoDB 中的数据)。
您可以子类化celery.Task
并覆盖芹菜。Task.after_return这样它就可以task_id
保存到 Neo4J。请注意,retval
可能是未捕获的异常。