如何在celery worker执行任务之前访问args和kwargs ?



我有一个python函数,注册为一个芹菜任务,如:

import celery
@celery.task(base=MyTask)
def my_fn(*args,**kwargs):# dooing stuff

我想检查argskwargs在任务执行之前仍然有效。为此,我试图覆盖Task类的executerun函数,但它们没有像代码和文档中所述的那样执行。(至少我是这么理解的!)

executerun

一个使用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(...)...

如果有更好的解决方案,我想看看。

最新更新