首页 > 解决方案 > 具有长期计划任务的 Django + Celery

问题描述

我正在开发一个 Django 应用程序,它严重依赖 Celery 任务调度,使用 Redis 作为后端。任务可以设置为在很长一段时间内运行,也可以在几秒/分钟内运行。

我已经阅读了 Redis 可见性超时和调度任务的结果,timedelta 大于可见性超时(我也在以前的项目中处理它),所以我很感兴趣,如果有什么比我的解决方案更整洁,即在需要执行“主”任务前 5 分钟运行另一个“辅助”任务,安排“主”任务在所需时间运行,将任务 ID 存储在 DB 中,然后检查“主”任务,如果存储的任务 ID 是正在运行的任务 ID。最后一部分(存储任务 ID)是必需的,因为多次运行“帮助”任务可能会产生大量“主”任务实例,但使用这种方法,每个任务都会有不同的任务 ID。

我真的很讨厌这种方法听起来如何以及它是如何工作的,好像任务计划从当前时间开始一个月运行,“帮助”和“主要”任务执行多达一百次。

我也知道这是一个悬而未决的问题,所以我对更简洁的解决方法感兴趣,而不是解决方案本身。

标签: djangorediscelery

解决方案


在测试了可用选项后,我认为仅使用RabbitMQ作为经纪人可以解决整个问题。

虽然它对我来说是一个可行的选择,但缺少一些redis配置参数(例如池大小)使得它对于那些使用托管服务的人无法使用,并且对打开的代理连接有一定的限制。


推荐阅读