【问题标题】:Why is celery attempting to execute a task that no longer exists?为什么 celery 试图执行一个不再存在的任务?
【发布时间】:2015-01-18 23:56:30
【问题描述】:

我是一家公司的新员工,该公司使用 Django 和 Celery 进行异步通信。我也是 Celery 的新手。

之前的程序员留下了一个过时的 Celery 任务定义。它每 30 秒执行一次数据库检索,执行一堆逻辑,然后将结果丢弃。这显然是一个死胡同,后来完成了一个不同的系统,该系统完成了这实际上应该做的事情。

我已经从 python 源文件中删除了任务定义,并且还从我们的 settings.py 文件中删除了以下部分:

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "foo.tasks.execute_useless_task",
        "schedule": timedelta(seconds=30),
    },
}

问题是,每当我通过主管启动 django 和 Celery 时,Celery 仍在尝试执行它。来自 /var/log/supervisor/celeryd-stdout---supervisor-FZ2Xqo.log(为简洁起见,行截断):

ERROR 2014-11-20 15:26:35,637 base+498 Failed to submit message: u'Unknown task ignored: Task of kind \'foo.tasks.execute_useless_task\' is not registered, please make sure it\'s imported...
ERROR 2014-11-20 15:26:35,751 base+504 Unknown task ignored: Task of kind 'foo.tasks.execute_useless_task' is not registered, please make sure it's imported...
ERROR 2014-11-20 15:26:35,764 base+504 Unknown task ignored: Task of kind 'foo.tasks.execute_useless_task' is not registered, please make sure it's imported...
...and so on...

我整天都在尝试通读 celery 文档,以确切了解 celery 是如何知道这项任务的,现在我已经从我们的代码库中删除了它的所有痕迹(同时被拉向 50 个不同的方向,自然而然地同时成为开发人员、管理员和技术支持人员)。我发现的大多数文档或讨论都围绕着无法执行任务,并且扭转我发现的方向没有任何结果。

如果有人可以指导我查看一些文档,该文档准确地指定了通过 Django 向 celery 注册任务的所有方式,以便我弄清楚 celery 是如何知道该任务存在的,我将不胜感激。

【问题讨论】:

    标签: django scheduled-tasks celery


    【解决方案1】:

    回答了我自己的问题。

    我原以为消息队列是空的,但事实并非如此。清除 redis 为我解决了这个问题:

    # redis-cli
    > FLUSHDB
    > FLUSHALL
    

    问题回答:How do I delete everything in Redis?

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2012-03-15
      • 1970-01-01
      • 2020-12-26
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多