我正在尝试在方法任务上运行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,但无法真正解决问题所在。有谁知道如何解决这个问题?
答案 0 :(得分:4)
问题是Celerybeat在调用方法之前不会实例化X.如果方法未绑定到对象,task_method过滤器默认调用未绑定方法。
我的问题是,你想在这里完成什么? X没有状态,为什么不使用module-evel函数?