2016-04-25 37 views
0

我试图去清理一些东西后,我杀了一个正在运行的任务在芹菜。目前,我正在打2个问题:在Celery + Python中,如何从task_revoked函数访问任务参数?

1)任务吊销函数体里面,我怎么可以访问该任务调用该函数的参数:因此,例如,如果该任务被定义为:

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

我将如何访问barbaz里面的task_revoked.connect代码?

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

如果我foo定义是这样的:

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

和发言权调用它....瓶像foo(bar, baz),然后我会得到一个错误的第三个参数的预期,这意味着做装饰不通过self参数自动添加任何上下文。

应用提前

回答

1

你可以从请求对象的任务参数表是简单地定义为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) 

这将打印给任务的参数。

更新:

你必须使用bindbound

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

的东西是芹菜文档显示某种课堂互动的,而是给比其他任何更多的细节:http://docs.celeryproject.org/en/master/userguide/tasks.html#context。如果我试图在一个类中推送我的函数并调用它们,那么这个自我不会构成一个状态参数,这表明装饰器不会添加任何额外的东西 –

+0

@omu_negru看起来您的代码中存在拼写错误,检查更新的答案。 – ChillarAnand

+0

实际上做到了。非常感谢,不会发现那个 –