Celery 任务未在提供的开始时间开始

Celery task not starting at the start time provided

我有一个 Django 应用程序,它利用 celery 来处理用户计划的任务。我目前遇到一个问题,我为 PerodicTask 设置了开始时间,但它没有在那个特定时间开始,而是在稍后的某个时间开始。

环境:

task = PeriodicTask(name="foo",task="bar_task",
                    start_time=DateTime5MinutesAhead, 
                    interval=EveryHourInterval)
task.save()

我希望任务 运行 首先在创建任务后的 5 分钟内完成,然后每隔一小时完成一次。相反,它似乎 运行 在之后的某个任意点,完全忽略了 start_time 参数。

我是否误解了 start_time 参数的用途?

我试过 IntervalSchedule 以及 CrontabSchedule

似乎都没有在准确的开始时间开始。

奖励: 我的发现中真正奇怪的是,如果我将 IntervalSchedule 设置为每 分钟 它实际上确实,事实上,启动正确并且 运行 正确,但如果我将其设置为其他任何设置,它就不再有效。

您需要将 last_run_at 设置为 start_time - interval

        task = PeriodicTask(name="foo",task="bar_task",
                start_time=DateTime5MinutesAhead,
                last_run_at=DateTime5MinutesAhead - timedelta(hour=1),
                interval=EveryHourInterval)
        task.save()

不确定这是错误还是功能,但对我来说效果很好,

参考: https://github.com/celery/django-celery-beat/issues/259