在Celery + Python中,如何从task_revoked函数访问任务参数?

时间:2016-04-25 15:23:55

标签: python asynchronous celery

在我杀掉芹菜中的一个正在运行的任务后,我试图清理一些东西。我目前遇到了两个问题:

1)在任务撤销函数体内部,如何访问调用任务函数的参数:例如,如果任务被定义为:

@app.task()
def foo(bar, baz):
    pass

如何在bar代码中访问baztask_revoked.connect

2)我想杀死一个任务,只有当它的状态不是X时。这意味着一方面检查任务,另一方面设置状态。我猜想可以完成对状态的检查,但是我很难理解任务函数体内的上下文。

如果我这样定义foo:

@app.task(bound=True)
def foo(self, bar, baz):
    pass

并从说起......像foo(bar, baz)那样烧瓶,然后我会得到第三个参数预期的错误,这意味着装饰器不会通过self参数自动添加任何上下文

该应用只是定义为celery.Celery()

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以从请求对象中获取任务args。

from celery.signals import task_revoked

@task_revoked.connect
def my_task_revoked_handler(sender=None, body=None, *args,  **kwargs):
    print(kwargs['request'].args)

这将打印给任务的参数。

<强>更新

您必须使用bind而不是bound

@app.task(bind=True)
def foo(self, bar, baz):