在我杀掉芹菜中的一个正在运行的任务后,我试图清理一些东西。我目前遇到了两个问题:
1)在任务撤销函数体内部,如何访问调用任务函数的参数:例如,如果任务被定义为:
@app.task()
def foo(bar, baz):
pass
如何在bar
代码中访问baz
和task_revoked.connect
?
2)我想杀死一个任务,只有当它的状态不是X时。这意味着一方面检查任务,另一方面设置状态。我猜想可以完成对状态的检查,但是我很难理解任务函数体内的上下文。
如果我这样定义foo:
@app.task(bound=True)
def foo(self, bar, baz):
pass
并从说起......像foo(bar, baz)
那样烧瓶,然后我会得到第三个参数预期的错误,这意味着装饰器不会通过self参数自动添加任何上下文
该应用只是定义为celery.Celery()
提前致谢
答案 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):