【问题标题】:In Celery tasking, is the database scheduler sufficient, or do I need to specify the run_every property as well?在 Celery 任务中,数据库调度程序是否足够,或者我是否还需要指定 run_every 属性?
【发布时间】:2025-12-22 10:55:06
【问题描述】:

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

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

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

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

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

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

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

【问题讨论】:

    标签: celery django-celery celery-task


    【解决方案1】:

    我从不使用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 调度程序,而不是某些第三方实现。

    【讨论】:

      最近更新 更多