重置芹菜任务的倒计时

Posted

技术标签:

【中文标题】重置芹菜任务的倒计时【英文标题】:Reset countdown on Celery task 【发布时间】:2012-03-24 12:37:15 【问题描述】:

我需要在倒计时后运行 celery 任务,但能够在某些条件下重置倒计时。例如,我想用countdown=15调用apply_async,但是如果在任务执行之前发生了某些事件,我想再次将倒计时设置为15秒。

根据文档和谷歌搜索,我认为我可以通过保存任务 ID 来完成此操作,然后在事件发生时撤销并重新创建任务。我想知道是否有更优雅的方法。

【问题讨论】:

【参考方案1】:

除了设置倒计时,你不能撤销这个任务并创建一个新任务吗?

【讨论】:

嗯,正如我所说,这是我在阅读文档后想出的,但当时感觉不对,所以我想知道是否有其他方法。【参考方案2】:

使用一些缓存,比如 Redis,来存储一些锁键。当您调用 apply_async 时,键的增量值。当你在 celery 中执行这个任务时 - 减少这个值。如果值为 0 - 执行任务。因此,如果有两次 apply_async 调用,您的计数器将为 2,并且将跳过第一次执行任务。

我认为this code can help you。

【讨论】:

以上是关于重置芹菜任务的倒计时的主要内容,如果未能解决你的问题,请参考以下文章

重置后JavaScript倒计时器不显示按钮

在 Unity 中使用按钮重置计时器

如何重置 setInterval 计时器?

刷新页面时重置计时器javascript

滚动 UITableView 期间计时器将重置并停止运行

我如何制作一个可重置的RxSwift计时器?