我有一个python函数,注册为一个芹菜任务,如:
import celery
@celery.task(base=MyTask)
def my_fn(*args,**kwargs):# dooing stuff
我想检查args
和kwargs
在任务执行之前仍然有效。为此,我试图覆盖Task
类的execute
和run
函数,但它们没有像代码和文档中所述的那样执行。(至少我是这么理解的!)
execute
run
一个使用run
的示例,类似于我想要的
这就是我如何定义我的MyTask
类:
from celery import Task
class MyTask(Task):
def run(self,*args,**kwargs): #does't get called.
def execute(self,request,*args,**kwargs): #does't get called.
我应该重写什么类或函数?这难道不可能吗?
提前感谢!
我刚刚发现,如果你覆盖__call__
功能,它可以正常工作。
代码变成:
from celery import Task
class MyTask(Task):
def __call__(self,*args,**kwargs):
#do stuff
return super(...)...
如果有更好的解决方案,我想看看。