如何将参数传递给芹菜的任务?

时间:2017-06-06 12:51:34

标签: python redis celery

对于我的网络应用程序,我使用celeryredis后端。官方FAQ目的是如果我拥有任务的ID,则获取任务的结果。

result = my_task.AsyncResult(task_id)
result.get()

我可以轻松访问任务正文中的参数:

@app.task
def my_task(foo, bar, baz=None):
    kwargs = self.request.kwargs
    args = self.request.args

有没有办法从AsyncResult或任何具有任务ID的地方获取argskwargs

2 个答案:

答案 0 :(得分:1)

如果任务处于暂挂状态或当前正在执行,您可以看到任务as mentioned here的参数。

如果要获取失败任务的参数,可以使用on_failure处理程序设置自定义基本任务,以便在任务失败时获取args。

from celery import Task

class CustomBaseTask(Task):        

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

@app.task(base=CustomBaseTask)
def add(x, y):
    raise error

另一方面,如果您的任务成功执行,您将只获得结果,并且您无法收回您的论据,因为该信息已被经纪人员消耗和处理。

答案 1 :(得分:1)

对于新的Celery版本,您可以激活“ result_extended”并从任务对象获取args:

app.conf.update(
   result_extended=True
)

然后,就:

print(task.args)