python - celery :任务层次结构后的回调

标签 python concurrency celery

我正在使用网络应用程序中的 Celery 来启动任务层次结构。

任务

我正在使用以下任务:

  • task_a
  • task_b
  • task_c
  • notify_user

Django View 启动多个 task_a 实例。他们每个人都做一些处理,然后启动几个 task_b 实例。每一个都做一些处理,然后启动几个 task_c 实例。

可视化:

Tree

目标

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

  1. View 应该只是“启动”任务然后返回。
  2. 每个子任务都依赖于父任务。父任务不直接依赖于子任务。父任务启动所有子任务后,就可以停止。
  3. 一切都可以并行化,只要父任务在子任务启动之前运行即可。
  4. 所有任务完成后,应调用notify_user回调函数。
  5. notify_user 回调函数需要访问来自 task_c 的数据。

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

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

最佳答案

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

关于python - celery :任务层次结构后的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737127/

相关文章:

c# - 在不消耗的情况下观察 BlockingCollection 中的变化

celery autodiscover_tasks 不适用于 ValueError : Empty module name

python - numpy - 给定一个数字,找到与它相加的数字,具有模糊权重

python - 有人在 Cygwin 上安装 MySQLdb for Python 吗?

python - 从 Python Flask 中的链接获取信息

c++ - sem_timedwait 随机失败

python - 为什么Django Channels Daphne不能使用多线程并发处理请求?

python - 在 Windows 资源管理器中拖放到 Python 脚本

python - celery django解释

python - 通过 task_id 在 celery 中重试任务