【问题标题】:I want to exceute one process only after completion of another process in my django application using celery我只想在我的 django 应用程序中使用 celery 完成另一个进程后才执行一个进程
【发布时间】:2019-11-01 00:54:12
【问题描述】:

我是芹菜的新手。 我只想在另一个进程完成后运行一个进程。 在搜索时我发现了一个代码

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”方法中并执行它.

【问题讨论】:

    标签: django celery celery-task


    【解决方案1】:

    任务已经完成,因为on_success 获得了返回值。它只是当 celery 记录它看起来像 on_success 在函数返回之前运行的方式 add_val

    【讨论】:

    • 感谢您的回复,但是在这种情况下,如果我执行任何其他流程,那么它将在第一个完成之前执行,那么还有其他方法可以做到吗?
    • 如果您在 on_success 中启动其他进程,则该任务已完成 (docs.celeryproject.org/en/latest/reference/…)。您甚至可以将该任务的结果发送到您的新进程,您的任务结果将在retval。
    【解决方案2】:

    虽然on_success 方法可能有效,但我相信callbacks 或chains 将是处理此问题的“官方”方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-09
      • 2019-08-13
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      相关资源
      最近更新 更多