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



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

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

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

如何访问task_revoked.connect代码中的barbaz

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):

相关内容

  • 没有找到相关文章

最新更新