如何检查 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() 具有可选参数 link
和 link_error
,如果任务成功完成 (link) 或失败 (link_error)。
我使用的是以下内容 - 我经常将任务安排到 运行(比如每 5 分钟一次),并且我使用分布式锁来确保我始终只有一个任务实例 运行宁.
最后提醒一下 - 您始终可以实施自己的调度程序,并在节拍配置中使用它。我过去曾考虑过这样做,以获得与您想要的完全相同的东西,但我认为我已经拥有的解决方案对我来说已经足够好了。
你可以试试this
它为您的任务提供了一个单例基础 class。
我将 Celery 与 Django 模型一起使用,并在模型级别实现了一个布尔值 has_task_running
。然后使用 Celery 信号,当信号 before_task_publish
被触发时,我将标志的状态更改为 True
,当任务终止时,我将标志的状态更改为 False
。不简单但灵活
我有一个定期任务安排为每 10 分钟 运行。有时这个任务在 2-3 分钟内完成,有时需要 20 分钟。
有没有办法在上一个任务还没有完成的情况下使用celery beats不打开任务?我在间隔设置中没有看到它的选项。
不,Celery Beat 对 运行ning 任务一无所知。
实现您想要做的事情的一种方法是 link 任务本身。例如,async_apply() 具有可选参数 link
和 link_error
,如果任务成功完成 (link) 或失败 (link_error)。
我使用的是以下内容 - 我经常将任务安排到 运行(比如每 5 分钟一次),并且我使用分布式锁来确保我始终只有一个任务实例 运行宁.
最后提醒一下 - 您始终可以实施自己的调度程序,并在节拍配置中使用它。我过去曾考虑过这样做,以获得与您想要的完全相同的东西,但我认为我已经拥有的解决方案对我来说已经足够好了。
你可以试试this 它为您的任务提供了一个单例基础 class。
我将 Celery 与 Django 模型一起使用,并在模型级别实现了一个布尔值 has_task_running
。然后使用 Celery 信号,当信号 before_task_publish
被触发时,我将标志的状态更改为 True
,当任务终止时,我将标志的状态更改为 False
。不简单但灵活