子类芹菜任务

yar*_*elk 5 python django celery django-celery

我正在编写很多非常相似的任务,并想知道如何更好地子类化Task以减少样板.因为一个任务只是一次实例化,所以你不能__init__像我下面所说的那样把事情放进去,但它应该说明一点.

我想要完成的事情:

class EmailTaskOne(Task):
    def run(self, object_id):
        email_data = EmailData.objects.get(pk=object_id)
        data = self.do_common_stuff(email_data)
        self.do_unique_stuff(data)

class EmailTaskTwo(Task):
    def run(self, object_id):
        email_data = EmailData.objects.get(pk=object_id)
        data = self.do_common_stuff(email_data)
        self.do_unique_stuff2(data)

# lots more tasks like this
Run Code Online (Sandbox Code Playgroud)

我想拥有的是:

class BaseEmailTask(Task):
     abstract = True
     #...Insert Magic Here...

class EmailTaskOne(BaseEmailTask):
     def run(self, object_id):
         self.do_unique_stuff(self.data)
Run Code Online (Sandbox Code Playgroud)

所以,既然__init__是正确的,我在哪里设置抽象类中的类.我可以很容易地定义一堆函数,如果我想做的就是分解一些东西,但是一些(很多)样板取决于object_id.

mic*_*mit 6

我和MauroRocco的答案对你有帮助吗?

看看芹菜任务和自定义装饰

在那里,我成功地将参数传递给扩展的Task