我正在尝试创建一些芹菜任务作为课程,但我遇到了一些困难。课程是:
class BaseCeleryTask(app.Task):
def is_complete(self):
""" default method for checking if celery task has completed. """
# simply return result (since by default tasks return boolean indicating completion)
try:
return self.result
except AttributeError:
logger.error('Result not defined. Make sure task has run!')
return False
class MacroReportTask(BaseCeleryTask):
def run(self, params):
""" Override the default run method with signal factory run"""
# hold on to the factory
process = MacroCountryReport(params)
self.result = process.run()
return self.result
但是当我初始化应用程序并检查app.tasks(或运行worker)时,app似乎在其注册表中没有上述任务。其他基于功能的任务(using app.task() decorator
)似乎注册正常。
我将以上任务运行为:
process = SignalFactoryTask()
process.delay(params)
Celery worker错误,显示以下消息:
Received unregistered task of type None
。
我认为我遇到的问题是:如何将自定义类添加到任务注册表中,就像我使用基于常规功能的任务一样?
答案 0 :(得分:2)
进入完全相同的问题,花了几个小时才找到解决方案因为我90%确定它是一个错误。在课程任务中,请尝试以下
class BaseCeleryTask(app.Task):
def __init__(self):
self.name = "[modulename].BaseCeleryTask"
class MacroReportTask(app.Task):
def __init__(self):
self.name = "[modulename].MacroReportTask"
似乎在应用程序中注册它仍然有一个名称未自动配置的错误。如果有效,请告诉我。