如何在使用 beat 再次运行之前检查芹菜任务是否已运行?



我有一个计划每 10 分钟运行一次的定期任务。 有时此任务在 2-3 分钟内完成,有时需要 20 分钟。

如果上一个任务尚未完成,有没有办法使用芹菜节拍不打开任务? 我在间隔设置中看不到它的选项。

不,Celery Beat 对运行任务一无所知。

实现您正在尝试执行的操作的一种方法是将任务链接到自身。 例如,async_apply() 具有可选的参数linklink_error,可用于提供签名(也可以是单个任务),以便在任务成功完成(链接)或不成功(link_error)时运行。

我使用的如下 - 我安排任务频繁运行(例如每 5 分钟运行一次),并且我使用分布式锁来确保我始终只有一个任务实例在运行。

最后提醒一下 - 您始终可以实现自己的调度程序,并在节拍配置中使用它。我过去曾考虑这样做是为了您想要的完全相同的事情,但决定我已经拥有的解决方案对我来说已经足够了。

你可以试试这个 它为您的任务提供了一个单一实例基类。

我将Celery与Django模型一起使用,并在模型级别实现了布尔has_task_running。然后,对于 Celery 信号,我将标志的状态更改为True当信号before_task_publish被触发时,False当任务终止时。不简单,但灵活。

相关内容

  • 没有找到相关文章

最新更新