【发布时间】:2022-01-20 00:30:59
【问题描述】:
我正在为 Django 项目升级到 celery 5.x。由于不再有 @scheduled_task 装饰器,我将所有这些更改为 @shared_task 并编写了一些代码来创建 CrontabSchedule 实例并将 PeriodicTask 实例与应该按计划运行的每个任务的实例相关联。我从beat_init 信号接收器调用它。我将 celery worker & beat 作为单独的进程运行。
我正在记录设置 CrontabSchedule 和 PeriodicTask 实例的函数的信息,并且我看到了 celery beat 进程的日志输出。紧接着,我看到 DatabaseScheduler: Schedule changed." 消息。这一切都符合预期并且很好。
然而,随后,celery beat 只是坐着,什么也不做。 beat 从不发送任何消息,因此 celery worker 从不执行任何计划任务。
在django-admin shell_plus 中,PeriodicTask.objects.all() 向我展示了许多计划任务,这些计划的计划看起来都应该如此。这是输出中的 1 个示例,应该每天每分钟运行一次:
<PeriodicTask: dhnetwork.tasks.send_queued_mail: {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59} {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23} * {1,2,3,4,5,6,7,8,9,10,11,12} {0,1,2,3,4,5,6} (m/h/dM/MY/d) America/Los_Angeles>
任何想法我可能做错了什么和/或如何诊断问题?
【问题讨论】:
标签: django celery celerybeat django-celery-beat