django + celery - 如何在我的 django 应用程序中为 celery 设置 crontab 计划?

Posted

技术标签:

【中文标题】django + celery - 如何在我的 django 应用程序中为 celery 设置 crontab 计划?【英文标题】:django + celery - How do I set up a crontab schedule for celery in my django app? 【发布时间】:2014-07-18 01:08:43 【问题描述】:

我正在按照这里的说明进行操作:

http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#crontab-schedules

我应该能够做到以下几点:from celery.schedules import crontab

在我的settings.py 我有:

from kombu import serialization
serialization.registry._decoders.pop("application/x-python-serialize")
import djcelery
djcelery.setup_loader()
from celery.schedules import crontab

...

CELERYBEAT_SCHEDULE = 
    'first_task': 
        'task': 'apps.icecream.tasks.sync_flavors',
        'schedule': crontab(minute='*/30', hour='1, 3, 6, 8-20, 22')
    ,
    'second_task': 
        'task': 'apps.robots.tasks.run_robots',
        'schedule': crontab(minute='*/6')
    

但是,我收到一个错误:“没有名为 schedules 的模块”

如果我切换到另一种调度方式,使用 timedelta,那么一切都很好,我可以让我的定期任务运行:

CELERYBEAT_SCHEDULE = 
    'first_task': 
        'task': 'apps.icecream.tasks.sync_flavors',
        'schedule': timedelta(minutes=30)
    ,
    'second_task': 
        'task': 'apps.robots.tasks.run_robots',
        'schedule': timedelta(minutes=6)
    

为什么我不能使用 crontab 方法?

【问题讨论】:

【参考方案1】:

发生这种情况是因为您在与 settings.py 相同的包中有一个 celery.py 文件,它会影响全局 celery 包。

要解决这个问题,请在 settings.py 的开头插入以下字符串:

from __future__ import absolute_import

希望对你有帮助!

【讨论】:

因为在 settings.py 所在的同一文件夹中,您有一个文件 celery.py 与“芹菜”包冲突。 @AlbertTugushev 为您的解决方案提供一些解释以及它为何有效。 谢谢,这就解释了。 还记得删除pyc 文件。我有一个导致此错误的celery.pyc 是的!成功了,谢谢,谢谢你的解释!

以上是关于django + celery - 如何在我的 django 应用程序中为 celery 设置 crontab 计划?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断任务是不是已经在 django-celery 中排队?

如何在 Windows 机器上用 django 测试 celery

在使用 django_celery_beat 设置的 Django 视图中使用 Celery 定期任务输出,并使用 Redis 设置缓存

在 Django 单元测试中使用 mock 修补 celery 任务

使用 Django 在 Elastic Beanstalk 上运行 Python 的 Celery

使用 Django 在 Elastic Beanstalk 上运行 Python 的 Celery