【发布时间】:2023-03-07 14:20:02
【问题描述】:
我必须生成某些任务并让它们并行执行。但是,我还需要集中更新所有这些结果。
是否有可能以某种方式访问父任务中所有这些任务的结果?我知道我不能从任务中调用 task_result.get(),因为 Celery 不允许这样做,还有其他方法可以实现吗?
【问题讨论】:
我必须生成某些任务并让它们并行执行。但是,我还需要集中更新所有这些结果。
是否有可能以某种方式访问父任务中所有这些任务的结果?我知道我不能从任务中调用 task_result.get(),因为 Celery 不允许这样做,还有其他方法可以实现吗?
【问题讨论】:
您可以让 Celery 等待子任务的结果(请参阅 disable_sync_subtasks 参数到 get()),但不建议这样做,因为您可能会使工作人员死锁(有关详细信息,请参阅 here)。所以如果你使用它,你应该知道你在做什么。
为您的用例推荐的方法是使用chord:
和弦就像一个组,但有一个回调。一个和弦由一个标题组和一个正文组成,其中正文是一个任务,应该在标题中的所有任务完成后执行。
这确实需要你稍微重构你的逻辑,这样你就不需要在父任务中处理子任务的结果,而是在和弦的主体中处理它。
【讨论】: