2013-05-21 41 views
7

我正在使用Django定期芹菜任务。我曾经在我的应用程序/文件tasks.py以下任务:芹菜节拍队列包括过时的任务

@periodic_task(run_every=timedelta(minutes=2)) 
def stuff(): 
    ... 

但是,现在这个任务已经从我的应用程序/ tasks.py文件中删除。但是,我总是看到调用此任务在我的芹菜日志:

[2013-05-21 07:08:37,963: ERROR/MainProcess] Received unregistered task of type u'app.tasks.stuff'. 

看来,我用不更新其队列中的芹菜节拍调度。这是如何在我的项目/ settings.py文件中定义调度程序:

CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler" 

重新启动芹菜工没有帮助。仅供参考,我使用Redis经纪人。

我该如何清除或更新芹菜节拍队列,以便旧的任务不会发送到我的芹菜工?

+0

我认为你也必须删除该日程安排的数据库条目。你可以从django管理员那里这样做。 – Ngenator

+0

嗨里吉斯,你是否设法解决这个问题。我有同样的问题。 @Ngenator - 你的解决方案是 –

+0

这个问题可能发生在redis服务器上。由于芹菜任务是一个被推入redis服务器的pickle对象,redis保留了过时的任务。重新启动redis服务器,或调用任务的清除功能。 –

回答

-1

删除.pyc文件以确定任务最初写入的位置。或者,只需删除项目目录中的所有.pyc文件。

这个命令应该工作:

find . -name "*.pyc" -exec rm -rf {} \; 

How do I remove all .pyc files from a project?

+0

这不行!我也尝试删除'celerybeat-schedule'。 – Babu

2

安装django-celery

如上所述,该项目不需要使用芹菜,但你需要这个来启用管理界面/admin/djcelery/来管理定期任务。最初不会有任何注册或定期任务。

重新启动敲打并再次检查表格周期性任务。 Beat会使用设置或装饰器中定义的间隔或crontab将现有的计划任务添加到该表中。在那里你可以删除不需要的任务。

UPDATE:从celery4开始,建议使用这个软件包。 https://github.com/celery/django-celery-beat