Sto provando a utilizzare i metodi di classe come compiti di django-celery, contrassegnandolo con @task decorator. La stessa situazione è descritta here, posta da Anand Jeyahar. E 'qualcosa di simileutilizzando i metodi di classe come attività di sedano
class A:
@task
def foo(self, bar):
...
def main():
a = A()
...
# what i need
a.foo.delay(bar) # executes as celery task
a.foo(bar) # executes locally
Il problema è, anche se io uso istanza di classe come questo a.foo.delay(bar)
si dice, che foo
ha bisogno di almeno due argomenti, che Meens che self
manca puntatore.
Maggiori informazioni:
- Non posso convertire classe per modulo a causa di eredità
- I metodi sono fortemente dipendeva membri della classe, quindi non posso farli statico
- Marcatura classe come l'attività con @task decorator rende la classe un'attività stessa e potrebbe essere possibile eseguire i metodi dal metodo
run()
, utilizzando alcuni argomenti come chiave per la selezione del metodo, ma non è esattamente quello che voglio. - Creazione di un'istanza della classe e passando come argomento per
self
metodi cambia il mio modo di eseguire i metodi non come taks sedano, ma come metodi usuali (cioè durante il test) - ho cercato di scoprire come Posso registrare dinamicamente l'attività, ad esempio dal costruttore, ma il sedano condivide il codice tra i lavoratori, quindi è per questo che sembra impossibile.
Grazie per il vostro aiuto!
come lo si esegue? gli stessi esempi funzionano per me. – asksol
'a = A()' 'a.method (1,2)' o 'a.method.delay (1,2)' - il risultato è lo stesso – eviltnan