2013-06-21 12 views
6

Ho una classe con metodi decorare con @task sedano in questo modo:Sedano @task non funziona con metodi di istanza

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: " 

dice qui,

p = Port() 

p.process.apply_async() 

Ho anche provato: p.process.delay(), con lo stesso risultato di sotto.

quando l'eseguo, ottengo questo errore:

[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)

Questa è la parte importante, TypeError: process() takes at least 1 argument (0 given).

Ora come posso risolvere questo?

Alcune persone dicono che ciò accade perché sedano usa il metodo non associato all'oggetto inizializzato e altri dicono che funziona, mi manca qualcosa qui?

+0

Se per "metodi di classe" Vuoi dire normali metodi di istanza (come suggerisce il tuo esempio), questo è probabilmente un duplicato di [usando i metodi di classe come attività celery] (http://stackoverflow.com/questions/9250317/using-class-methods-as-celery-tasks). Se già lo sapevi, ma in realtà stai parlando di '@ classmethod's qui, ti preghiamo di chiarire e dare un esempio appropriato. – abarnert

+0

Per quanto riguarda la tua domanda ... Sì, intendo i metodi di istanza. Per quanto riguarda il link che hai fornito, l'ho già seguito, ora ottengo l'errore sopra riportato ... – securecurve

risposta

3

Celery dispone di supporto sperimentale per l'utilizzo dei metodi come attività dalla versione 3.0.

La documentazione per questo è in celery.contrib.methods, e menziona anche alcuni avvertimenti si dovrebbe essere a conoscenza di:

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

Usato this come riferimento

+3

Questo sembra essere stato rimosso di recente poiché era troppo bacato - https://github.com/celery/celery/commit/4f43276c236bbef7239a49b93815f478aec1d9f6 – Hamy

+0

@Hamy, grazie per il puntatore :) .. Molto apprezzato! – securecurve

Problemi correlati