我正在使用网络应用程序中的 Celery 来启动任务层次结构。
任务
我正在使用以下任务:
task_a
task_b
task_c
notify_user
Django View 启动多个 task_a
实例。他们每个人都做一些处理,然后启动几个 task_b
实例。每一个都做一些处理,然后启动几个 task_c
实例。
可视化:
目标
我的目标是执行所有任务,并在整个层次结构完成后立即运行回调函数。此外,我希望能够将数据从最低任务传递到最高级别。
- View 应该只是“启动”任务然后返回。
- 每个子任务都依赖于父任务。父任务不直接依赖于子任务。父任务启动所有子任务后,就可以停止。
- 一切都可以并行化,只要父任务在子任务启动之前运行即可。
- 所有任务完成后,应调用
notify_user
回调函数。 notify_user
回调函数需要访问来自task_c
的数据。
所有任务都应该是非阻塞的,因此 task_b
不应等待所有 task_c
子任务完成。
实现上述目标的正确方法是什么?
最佳答案
解决方案原来是这个拉取请求中提供的动态任务功能:https://github.com/celery/celery/pull/817 .这样,每个任务都可以返回一组子任务,这些子任务将替换队列中的原始任务。
关于python - celery :任务层次结构后的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737127/