首页 > 解决方案 > 使用 celery Group 时如何在子任务实例中获取组 ID?

问题描述

当使用 Celery 4.3.0 链时,代码如下:

class BaseTask(Task):
    def on_success(self, retval, task_id, args, kwargs):
        pass

@app.task(bind=True, base=BaseTask)
def add(self, x, y):
    return x+y

@app.task(bind=True, base=baseTask)
def add_1(self,x, y):
    return x+y

task = group(add.s(1,3), add_1.s(2,4))()
group_id = task.id


我可以通过 taks.children[0]._cache.get("group") 获取 group_id,

如何在 BaseTask on_success 函数中获取 group_id?

标签: celery-task

解决方案


您可以在对象中找到任务组的 ID,app.task.Request通过Task对象提供,如下所示:

class BaseTask(Task):
    def on_success(self, retval, task_id, args, kwargs):
        group_id = self.request.group
        # rest of your code

推荐阅读