我是一家使用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...
我一直在努力通读芹菜文档,了解芹菜究竟是如何知道这项任务的,现在我已经从我们的代码库中删除了它的所有痕迹(同时被拉向50个不同的方向)立刻,同时成为开发人员,管理员和技术支持台,自然而然地。我发现的大多数文档或讨论都围绕着执行任务的失败,而扭转我在周围发现的方向却无处可去。
如果有人可以指导我一些文件,这些文件准确指出了人们可以通过Django向芹菜注册任务的所有方式,这样我就可以弄清楚芹菜怎么可能知道这个任务存在,我将不胜感激。
答案 0 :(得分:1)
回答了我自己的问题。
我原本以为消息队列是空的,但事实并非如此。清除redis为我解决了问题:
# redis-cli
> FLUSHDB
> FLUSHALL