Celery:任务层次结构后的回调


问题内容

我正在通过Web应用程序使用Celery来启动任务层次结构。

任务

我正在使用以下任务:

  • task_a
  • task_b
  • task_c
  • notify_user

Django视图将启动多个task_a实例。它们每个都进行一些处理,然后启动多个task_b实例。并且每个都进行一些处理,然后启动几个task_c实例。

可视化:

树

目标

我的目标是执行所有任务,并在整个层次结构完成后立即运行回调函数。 另外,我希望能够将数据从最低任务传递到最高层次。

  1. 该视图应仅“启动”任务,然后返回。
  2. 每个子任务取决于父任务。父任务并不直接依赖于子任务。父任务启动了所有子任务后,可以将其停止。
  3. 只要父任务在子任务启动之前运行,一切都可以并行化。
  4. 之后 所有 的任务已经完成,在notify_user回调函数被调用。
  5. notify_user回调函数需要访问从数据task_c秒。

所有任务都应是非阻塞的,因此task_b不应等待所有task_c子任务完成。

实现上述目标的正确方法是什么?


问题答案:

解决方案原来是此请求请求中提供的动态任务功能:https :
//github.com/celery/celery/pull/817。这样,每个任务可以返回一组子任务,这些子任务将替换队列中的原始任务。