芹菜击败方法任务不起作用

时间:2013-01-25 04:13:19

标签: python celery celerybeat

我正在尝试在方法任务上运行celerybeat,并且无法正常运行。这是一个示例设置:

from celery.contrib.methods import task_method
from celery import Celery, current_app

celery=celery('tasks', broker='amqp://guest@localhost//')
celery.config_from_object("celeryconfig")
class X(object):
    @celery.task(filter=task_method, name="X.ppp")
    def ppp(self):
        print "ppp"

我的celeryconfig.py文件是

from datetime import timedelta
CELERYBEAT_SCHEDULE = {
      'test' : {
               'task' : 'X.ppp', 
               'schedule' : timedelta(seconds=5)
               }, 
 }

当我运行celery beat时,我收到的错误如下:

 task X.ppp raised exception, TypeError('ppp() takes exactly 1 argument, (0 given)  

当我将方法转换为普通函数并使用`@ celery.task'进行装饰时,它确实有效,因此其余的设置似乎正在工作。我看到了警告in the docs about method tasks,但无法真正解决问题所在。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

问题是Celerybeat在调用方法之前不会实例化X.如果方法未绑定到对象,task_method过滤器默认调用未绑定方法。

我的问题是,你想在这里完成什么? X没有状态,为什么不使用module-evel函数?