Celery @task不适用于实例方法

时间:2013-06-21 23:55:04

标签: python django celery django-celery

我有一个用celery @task装饰方法的类,如下所示:

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

在这里打电话:

p = Port()

p.process.apply_async()

我也尝试过:p.process.delay(),结果如下。

当我运行它时,我收到此错误:

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

这是重要的部分,TypeError: process() takes at least 1 argument (0 given)

现在我该如何解决这个问题?

有些人说这是因为芹菜使用未绑定到初始化对象的方法任务,而其他人说它只是有效,我在这里想念一些吗?

1 个答案:

答案 0 :(得分:3)

自3.0版以来,Celery一直支持将方法用作任务。

此文档位于celery.contrib.methods,并且还提到了一些您应该注意的警告:

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

使用this作为参考