Celery:自定义基类/基于子类的任务未在app.tasks下显示

时间:2016-12-06 05:53:14

标签: python task celery

我正在尝试创建一些芹菜任务作为课程,但我遇到了一些困难。课程是:

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

我认为我遇到的问题是:如何将自定义类添加到任务注册表中,就像我使用基于常规功能的任务一样?

1 个答案:

答案 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"

似乎在应用程序中注册它仍然有一个名称未自动配置的错误。如果有效,请告诉我。