【发布时间】:2019-12-11 13:16:35
【问题描述】:
我有一个定期任务,计划每 10 分钟运行一次。有时此任务在 2-3 分钟内完成,有时需要 20 分钟。
如果上一个任务还没有完成,有什么办法可以使用celery beat 不打开任务?我在间隔设置中没有看到它的选项。
【问题讨论】:
-
对于任何重复数据删除问题,您都在寻找锁定机制
标签: python django task celery scheduling
我有一个定期任务,计划每 10 分钟运行一次。有时此任务在 2-3 分钟内完成,有时需要 20 分钟。
如果上一个任务还没有完成,有什么办法可以使用celery beat 不打开任务?我在间隔设置中没有看到它的选项。
【问题讨论】:
标签: python django task celery scheduling
不,Celery Beat 对正在运行的任务一无所知。
实现您想要做的事情的一种方法是将任务链接到自身。例如,async_apply() 具有可选参数 link 和 link_error,可用于提供签名(也可以是单个任务)以在任务成功完成(链接)或不成功(链接错误)时运行。
我使用的是以下内容 - 我安排任务频繁运行(比如每 5 分钟一次),并且我使用分布式锁来确保我始终只有一个任务实例在运行。
最后提醒一下 - 您始终可以实现自己的调度程序,并在您的节拍配置中使用它。过去我曾考虑为您想要的完全相同的事情执行此操作,但我认为我已经拥有的解决方案对我来说已经足够好了。
【讨论】:
你可以试试this 它为您的任务提供了一个单例基类。
【讨论】: