芹菜击败时间表,计划在负载上运行然后间隔

时间:2017-02-19 01:01:11

标签: python celery

我正在试图弄清楚如何在celery中配置一个周期性任务,以便在不考虑时间间隔的情况下运行。

例如,

$e->wentDownAt

将在节拍开始第一次运行后等待60秒。

这对于更长的间隔(例如一小时)来说是有问题的,这种间隔可以做一些立即有价值但不需要的工作"新鲜"在较短的时间间隔。

question解决了这个问题,但答案都不令人满意:

  1. 由于初始运行和计划现已分开,因此为要排队的任务添加启动延迟既不符合性能,也不利于维护,

  2. 在任务中重新执行计划对于可维护性是不利的。

  3. 在我看来这应该是显而易见的事情,所以我很惊讶这个问题是我能在这件事上找到的。我无法从文档和芹菜github问题中弄清楚这一点,所以我想知道我是否遗漏了一些明显的东西。

    修改

    这里的故事似乎还有更多,因为在尝试了一个小时间隔的不同任务后,它会在项目芹菜启动时立即运行。

    如果我停止并使用beat_schedule = { 'my-task': { 'task': 'module.my_task', 'schedule': 60.0, }, } 清除队列然后再次启动芹菜,则任务不会在心跳间隔内运行。这是有道理的,因为工作人员处理邮件但是beat有自己的日程记录celery purge -A proj -f,这不会受到清除的影响。

    如果我删除celerybeat-schedule并重新启动,则任务仍然无法运行。使用非默认计划db location启动芹菜节拍也不会导致任务运行。下一次任务运行的时间是我从任务的第一个开始时间(13:47)开始新节拍(14:59)而不是的一小时。

    似乎某些状态没有很好地记录或未知是这个问题的基础。我的问题也可以表述为:你如何强行击败以清除其最后一次运行的记录?

    我还担心在运行工作者并且击败时,运行celerybeat-schedule会给celery -A proj inspect scheduled但是可能必须在某个时候安排任务,因为它会运行。

0 个答案:

没有答案