Sto scrivendo un sacco di attività che sono molto simili, e voglio sapere come sottoclasse meglio lo Task
per ridurre lo schema. Dal momento che un compito viene solo instillato una volta, non è possibile inserire le cose in __init__
come mostrato di seguito, ma dovrebbe illustrare il punto.sottoclasse sedano Compito
quello che sto cercando di realizzare:
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
Quello che vorrei avere è:
class BaseEmailTask(Task):
abstract = True
#...Insert Magic Here...
class EmailTaskOne(BaseEmailTask):
def run(self, object_id):
self.do_unique_stuff(self.data)
Quindi, dal momento che __init__
è proprio fuori, dove si imposta la classe nel classe astratta. Posso definire un gruppo di funzioni abbastanza facilmente se tutto quello che voglio fare è prendere in considerazione alcune cose, ma alcune (molte) regole sono dipendenti da object_id.
possibile duplicato del [compito sedano e personalizzare decoratore] (http://stackoverflow.com/questions/6393879/celery-task- and-customize-decorator) – Louis
Mentre la soluzione è applicabile - la domanda posta è diversa. In quanto tale, non penso che sia un duplicato. Se stavo cercando di aumentare l'ESSENZIALITÀ dei miei compiti usando mixin e sottoclassi di compiti, non sarei alla ricerca di "personalizzare decoratore", ma "sottoclasse" o "mixin" o qualcosa del genere. – yarbelk