如何检查 celery 任务是否已经 运行 在 运行 之前再次使用节拍?

How to check if celery task is already running before running it again with beat?

我有一个定期任务安排为每 10 分钟 运行。有时这个任务在 2-3 分钟内完成,有时需要 20 分钟。

有没有办法在上一个任务还没有完成的情况下使用celery beats不打开任务?我在间隔设置中没有看到它的选项。

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

实现您想要做的事情的一种方法是 link 任务本身。例如,async_apply() 具有可选参数 linklink_error,如果任务成功完成 (link) 或失败 (link_error)。

我使用的是以下内容 - 我经常将任务安排到 运行(比如每 5 分钟一次),并且我使用分布式锁来确保我始终只有一个任务实例 运行宁.

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

你可以试试this 它为您的任务提供了一个单例基础 class。

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