【发布时间】:2022-01-22 23:23:32
【问题描述】:
我将django-celery-beat 用于一些每小时/每天的任务。然而,奇怪的行为让我不知所措。
我正在使用这段代码创建一个任务:
periodic_task = apps.get_model('django_celery_beat', 'PeriodicTask')
interval_schedule = apps.get_model('django_celery_beat', 'IntervalSchedule')
schedule, _ = interval_schedule.objects.get_or_create(every=2, period='hours')
periodic_task.objects.update_or_create(
task=TASK,
defaults={'name': '<task description>', 'interval': schedule},
)
其中TASK 是指向此任务的字符串:
@app.task(ignore_result=True)
def task():
<things to do>
pass
在你看到的代码中我使用了2小时的间隔,一旦我用celery -A [project-name] beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler开始节拍,就没有弹出错误(我不知道它是否真的有效,2小时是很多时间)。但是,当我将时间间隔更改为 1 小时时,它会发送以下垃圾邮件:
[2021-12-21 15:32:45,333: INFO/MainProcess] Task app.tasks.task[6c0343b0-faf1-4eae-a8e0-721c862120a9] succeeded in 0.0s: None
[2021-12-21 15:32:45,336: INFO/MainProcess] Scheduler: Sending due task <task description> (app.tasks.task)
然后它会一直持续到永恒,只能通过 Ctrl+C 停止。
我确实安装了 RabbitMQ 管理插件,并且从 UI 看起来一切都很好 - 没有队列,没有任何未确认的内容等。任何线索这可能导致什么?
即使在清除队列之后,它仍然会发生(使用celery -A [project-name] purge)。
【问题讨论】:
标签: django celery django-celery-beat