如何防止芹菜执行相同的任务?

Posted

技术标签:

【中文标题】如何防止芹菜执行相同的任务?【英文标题】:How to prevent the same task to be executed by celery? 【发布时间】:2016-08-29 16:44:48 【问题描述】:

我正在实现一个缓存服务器,它使用 celery 任务在后台更新缓存。我只用不同的参数(缓存键)调用它。

由于在将此服务器连接到我的主生产服务器后,它将每秒收到数十个相同缓存键的请求,我想确保在 celery 队列中使用相同缓存键的更新任务不超过一个(同时作为队列和集合工作)。

我想在运行任务之前使用 redis 集来确保这一点,但我正在寻找更好的方法。

【问题讨论】:

您的要求真的是“在 celery QUEUE 中只有一个具有相同缓存键的任务”还是“只有一个具有相同缓存键的任务同时运行(更新缓存)”? @MuhammadTahir 只有一个任务在 celery QUEUE 中具有相同的缓存键 看看这是否适合你docs.celeryproject.org/en/latest/tutorials/…。这适用于我提到的第二种情况,但也可以针对您的版本(我提到的第一种情况)进行修改。 Running "unique" tasks with celery的可能重复 @funky-future 可能是的。我将尝试查找我当时正在编写的代码,以检查这两个问题的要求是否有任何差异。虽然我记得我用这个github.com/cameronmaske/celery-once 解决了我的问题。 【参考方案1】:

只有一种方法,实现你自己的锁机制。 官方文档有一个nice example page.。 唯一的限制是你的想象力。

希望这会有所帮助。

【讨论】:

以上是关于如何防止芹菜执行相同的任务?的主要内容,如果未能解决你的问题,请参考以下文章

什么可能会延迟我的芹菜任务?

如何禁用芹菜任务结果记录?

芹菜:在特定时间间隔后执行任务

我应该如何在芹菜中实现任务集的回调

如何确保 Celery 任务是防止重叠的 Celery 任务执行

芹菜任务与偏移量相同的时间表