Celery:任务层次结构后的回调
问题内容:
我正在通过Web应用程序使用Celery来启动任务层次结构。
任务
我正在使用以下任务:
task_a
task_b
task_c
notify_user
Django视图将启动多个task_a
实例。它们每个都进行一些处理,然后启动多个task_b
实例。并且每个都进行一些处理,然后启动几个task_c
实例。
可视化:
目标
我的目标是执行所有任务,并在整个层次结构完成后立即运行回调函数。 另外,我希望能够将数据从最低任务传递到最高层次。
- 该视图应仅“启动”任务,然后返回。
- 每个子任务取决于父任务。父任务并不直接依赖于子任务。父任务启动了所有子任务后,可以将其停止。
- 只要父任务在子任务启动之前运行,一切都可以并行化。
- 之后 所有 的任务已经完成,在
notify_user
回调函数被调用。 - 该
notify_user
回调函数需要访问从数据task_c
秒。
所有任务都应是非阻塞的,因此task_b
不应等待所有task_c
子任务完成。
实现上述目标的正确方法是什么?
问题答案:
解决方案原来是此请求请求中提供的动态任务功能:https :
//github.com/celery/celery/pull/817。这样,每个任务可以返回一组子任务,这些子任务将替换队列中的原始任务。