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