【问题标题】: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 调度程序,而不是某些第三方实现。