首页 > 解决方案 > 在 Celery 任务中,数据库调度程序是否足够,或者我是否还需要指定 run_every 属性?

问题描述

我有一个应该每天运行一次的定期任务,但目前它每天运行两次,我不知道为什么。第二次运行发生在预期运行后几毫秒。

我的定期任务指定了run_every属性:

run_every = crontab(小时=1,分钟=1)

但在我的设置文件中,指定了数据库调度程序:

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

此外,在数据库中,还有包含任务名称及其 crontab 计划的表。例如,我们有一个名为 djcelery_crontabschedule 的表,它还指定同一任务应在凌晨 1:01 运行。

这会导致我的任务每天运行两次吗?

标签: celerydjango-celerycelery-task

解决方案


我从不使用run_every...这是我使用的 beatconfig.py 文件中的一个示例:

beat_schedule = {
    'company-data-report': {
        'task': 'report.company_data_report',
        'schedule': crontab(minute=0, hour=7),
        'args': [],
        'options': {'expires': 120*60}
    },
    etc

此特定任务每天在指定时间运行。我们使用默认的 Celery 调度器,而不是一些第三方实现。


推荐阅读