我只想在使用celery的django应用程序中完成另一个过程后才执行一个过程

时间:2019-06-18 11:27:54

标签: django celery celery-task

我对芹菜一无所知。 我只想在另一个过程完成后再运行一个过程。 搜索时,我发现了一个代码

class CallbackTask(Task):
    def on_success(self, retval, task_id, args, kwargs):
        print("success")
        pass

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        print("fail")
        pass


@celery.task(base=CallbackTask) # this does the trick
def add_val(x, y):
    time.sleep(20)
    return x + y

在运行该代码时,它按以下顺序显示状态:

  1. 已接收任务

    // 20分钟计时器后

  2. 成功(通过'on_success'方法打印)

3。任务完成(#ans-7)

实际上,这里的问题是“成功”在我的实际答案之前被打印出来,如果我在回答之后有任何方式得到答案,那么我可以轻松地将第二个过程放在“ on_success”方法中并执行它

2 个答案:

答案 0 :(得分:0)

因为on_success获得了返回值,所以任务已经完成。芹菜记录事情的方式就像on_success在返回函数add_val之前运行过

答案 1 :(得分:0)

尽管on_success方法可行,但我相信callbackschains都是处理此问题的“官方”方式。