【发布时间】:2019-08-23 02:43:42
【问题描述】:
我正在开发一个 Django 应用程序,它严重依赖 Celery 任务调度,使用 Redis 作为后端。任务可以设置为在很长一段时间内运行,也可以在几秒/分钟内运行。
我已经阅读了 Redis 可见性超时和 timedelta 大于可见性超时的调度任务的后果(我也在以前的项目中处理它),所以我很感兴趣,如果有什么比我的解决方案是在需要执行“主”任务前 5 分钟运行另一个“助手”任务,安排“主”任务在所需时间运行,将任务 ID 存储在 DB 中,然后签入“主” " 任务,如果存储的任务 ID 是正在运行的任务。最后一部分(带有任务 ID 存储)是必需的,因为多次运行“帮助”任务可能会产生许多“主”任务实例,但使用这种方法,每个任务都会有不同的任务 ID。
我真的很讨厌这种方法听起来和它是如何工作的,好像任务计划从当前时间开始一个月运行,“帮助”和“主要”任务执行多达一百次。
我也知道这是一个悬而未决的问题,因此我更感兴趣的是一种简洁的解决方法,而不是解决方案本身。
【问题讨论】:
-
为什么不将 django-celery-beat 与 cronschedule 任务一起使用 (pypi.org/project/django_celery_beat)?
-
@2ps,celery beat 是为运行周期性任务而创建的,如果仅用于解决相关问题,似乎过于复杂