2012-12-13 11 views
5

Piszę dużo zadań, które są bardzo podobne, i chcą wiedzieć, jak poprawić podklasę Task, aby zmniejszyć bojler. Ponieważ zadanie jest tworzone tylko raz, nie mogę umieścić rzeczy w __init__, tak jak pokazałem poniżej, ale powinno to zilustrować punkt.podklasowanie selera Zadanie

co usiłuję osiągnąć:

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 

Co chciałbym mieć to:

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

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

Tak, ponieważ __init__ jest tuż na zewnątrz, gdzie mogę konfigurację klasy w Klasa abstrakcyjna. Mogę dość łatwo zdefiniować grupę funkcji, jeśli wszystko, co chcę zrobić, to czynnik, ale część (wiele) tablicy zależy od obiektu id_obiektu.

+0

możliwe duplikat [zadania selera i dostosować dekorator] (http://stackoverflow.com/questions/6393879/celery-task- and-customize-decorator) – Louis

+0

Chociaż rozwiązanie ma zastosowanie - pytanie jest inne. Jako taki nie uważam tego za duplikat. Gdybym starał się zwiększyć SUCHOŚĆ moich zadań za pomocą miksów i podsieci zadań - nie szukałbym "customize decorator", ale "podklasy" lub "mixin" czy coś w tym stylu. – yarbelk

Odpowiedz

6

Czy odpowiedź na moje i MauroRocco może ci pomóc?

zobaczyć celery task and customize decorator

Nie udało mi się przekazywać argumenty do rozszerzonego Zadanie

+0

Chociaż nie podoba mi się akceptowanie odpowiedzi łącza, jego jest dobrą odpowiedzią. w skrócie - nadpisujemy metodę "__call__" zamiast "__init__' – yarbelk

+0

Jest to link do mojej własnej odpowiedzi ... jest odpowiedni również tutaj –

Powiązane problemy