celery中的两组group任务,如何让第二组任务等待第一组任务完成后执行

发布于 2022-09-06 23:02:21 字数 375 浏览 18 评论 0

我需要按步骤执行两组任务,每组任务中的子任务是并行celery执行的,但是第二组任务需要等待第一组任务全部完成后再继续执行

from celery import group
from tasks import add

group1 = group([add.s(2, 2), add.s(4, 4),])
group2 = group([add.s(2, 2), add.s(4, 4),])

希望让groups1中的任务先并发执行,这个需要调用celery的groups1.apply_async(),但这样会把groups1这个任务异步执行,我想让group2等待group1全部执行之后再继续执行?celery中有没有什么方法可以做到?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

掩饰不了的爱 2022-09-13 23:02:21

首先来分析下你上面的需求需要几个celery服务
主线程是必须的,所以需要线程main,
因为group2是在group1后执行的,所以group1和group2应该是同步方法,执行在同一线程;又因为他们需要对主线程异步,所以他们应该是执行在一个celery中的。
所以最终的结构应该大致如下:

  1. group1 对应于 celery1,并在 celery1 中执行
  2. group2 对应于 celery2,并在 celery2 中执行
  3. 有一个 celery3, group1 和 group2 应该同步执行在该celery中,且 group2 应该先执行
  4. celery3 执行于 main线程

大致实现:

@app.task()
def group1():
    return group([add.s(2, 2), add.s(4, 4),])
    
@app.task()
def group2():
    return group([add.s(2, 2), add.s(4, 4),])

@app.task()
def celery3():
    result = group1.delay()
    # sync group1
    result.collect()
    group2.delay()

# main thread
celery3.delay()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文