5

我正在写很多非常相似的任务,并且想知道如何更好地子类化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

我想要的是:

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

class EmailTaskOne(BaseEmailTask):
     def run(self, object_id):
         self.do_unique_stuff(self.data)

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

4

1 回答 1

6

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

查看celery 任务并自定义装饰器

在那里我成功地将参数传递给扩展任务

于 2013-03-05T16:47:58.693 回答