I have a class with methods decorate with celery @task like this:
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 here:
p = Port()
p.process.apply_async()
I also tried: p.process.delay()
, with the same below result.
When I run it, I get this error:
[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)
This is the important part, TypeError: process() takes at least 1 argument (0 given)
.
Now how can I solve this??
Some people say this happens because celery uses the method task unbound to the initialized object, and some others say it just works, do I miss something here?
Celery has experimental support for using methods as tasks since version 3.0.
The documentation for this is in celery.contrib.methods
, and also mentions some caveats you should be aware of:
http://docs.celeryproject.org/en/latest/reference/celery.contrib.methods.html
Used this as reference