我试图弄清楚如何在celery中配置一个定期任务,以计划在不考虑时间间隔的情况下在负载下运行。
例如,
beat_schedule = {
'my-task': {
'task': 'module.my_task',
'schedule': 60.0,
},
}
Run Code Online (Sandbox Code Playgroud)
首次开始运行节拍后,将等待60秒。
这对于较长的时间间隔(例如一个小时)是有问题的,该时间间隔可以进行立即有价值的工作,但不需要在较短的时间间隔中“新鲜”工作。
这个问题解决了这个问题,但是没有一个令人满意的答案:
因为现在将初始运行和计划分开,所以为要排队的任务增加启动延迟既不利于性能,又不利于可维护性。
在任务中重新实施时间表不利于可维护性。
在我看来,这应该是显而易见的,因此我很惊讶于我可以在此问题上找到所有这样的问题。我无法从文档和celery github问题中弄清楚这一点,所以我想知道我是否缺少明显的东西。
编辑:
这里的故事似乎还有更多,因为在以一个小时的间隔尝试执行另一项任务后,该任务在启动项目芹菜时立即运行。
如果停止并清除队列,celery purge -A proj -f然后再次启动celery,则该任务不会在心跳间隔内运行。这是有道理的,因为工作人员可以处理消息,但节拍具有自己的日程表记录celerybeat-schedule,该记录不受清除的影响。
如果我删除celerybeat-schedule并重新启动Beat,任务仍然无法运行。使用非默认时间表数据库位置启动芹菜拍子也不会导致任务运行。下一次任务运行是从我开始新节奏(14:59)起一个小时,而不是任务的首次开始时间(13:47)一个小时。
似乎有些状态记录得不好或未知,这是此问题的基础。我的问题也可以这样陈述:您如何强制击败以清除其上次跑步记录?。
我还担心,在运行工人并跳动时,跑步celery -A proj inspect scheduled会给人,- empty -但大概必须在某个时间安排任务,因为它开始运行了。
| 归档时间: |
|
| 查看次数: |
911 次 |
| 最近记录: |