2013-06-21 11 views
6

Mam klasy z metod dekorowania z selera @Task tak:Seler @Task nie działa z metod instancji

class Port(object): 

    """docstring for Port""" 


    def __init__(self,): 
     print 'Class has been initialized ...' 


    @celery.task(filter=task_method,name="Port.process")  
    def process(self,): 
     print "I'm inside the process task method: " 

Called tutaj:

p = Port() 

p.process.apply_async() 

Próbowałem również: p.process.delay(), z takim samym wynikiem poniżej.

Kiedy uruchamiam go, otrzymuję ten błąd:

[2013-06-22 02:32:53,988: ERROR/MainProcess] Task Port.process[77cff07e-4bc5-4e36-9c4e-b68d7616c74e] raised exception: TypeError('process() takes at least 1 argument (0 given)',) Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/celery/task/trace.py", line 228, in trace_task R = retval = fun(*args, **kwargs) File "/usr/local/lib/python2.7/site-packages/celery/task/trace.py", line 415, in __protected_call__ return self.run(*args, **kwargs) TypeError: process() takes at least 1 argument (0 given)

Jest to ważny element, TypeError: process() takes at least 1 argument (0 given).

Jak mogę to rozwiązać?

Niektórzy ludzie twierdzą, że tak się dzieje, ponieważ seler stosuje metodę niezwiązaną do zainicjowanego obiektu, a niektórzy twierdzą, że to po prostu działa, czy tęsknię za czymś tutaj?

+0

Jeśli przez „metody klasy” masz na myśli normalne metody instancji (jak sugeruje twój przykład), jest to prawdopodobnie duplikat [używania metod klasowych jako zadań selera] (http://stackoverflow.com/questions/9250317/using-class-methods-as-celery-tasks). Jeśli już o tym wiedziałeś, ale w rzeczywistości mówisz tutaj o @ classmethod, wyjaśnij i daj odpowiedni przykład. – abarnert

+0

Odnośnie twojego pytania ... Tak, mam na myśli metody instancji. Jeśli chodzi o podany link, już go śledziłem, teraz dostaję powyższy błąd ... – securecurve

Odpowiedz

3

Seler ma eksperymentalne wsparcie dla używania metod jako zadań od wersji 3.0.

Dokumentacja ta jest w celery.contrib.methods, a także wspomina pewne zastrzeżenia należy pamiętać o:

http://docs.celeryproject.org/en/latest/reference/celery.contrib.methods.html

Używane this jako odniesienie

+3

Wygląda na to, że został niedawno usunięty, ponieważ był zbyt błędny - https://github.com/celery/celery/commit/4f43276c236bbef7239a49b93815f478aec1d9f6 – Hamy

+0

@Hamy, Dzięki za wskaźnik :) .. Bardzo docenione! – securecurve