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

Dan*_*gen 9 python concurrency 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子任务完成.

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

Dan*_*gen 4

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