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