使用大型 ETA 调度 celery 任务

sma*_*ang 6 python redis celery

我目前正在使用ETA功能和 redis 代理在 celery 中试验未来的任务。使用 redis 代理的已知问题之一与可见性超时有关

如果在可见性超时内未确认任务,则任务将重新交付给另一个工作人员并执行。

这会导致执行时间超过可见性超时的 ETA/倒计时/重试任务出现问题;事实上,如果发生这种情况,它将再次执行,并再次循环执行。

我可以设想的一些任务将在几周/几个月的时间尺度上有一个 ETA。设置visibility timeout足够大以包含这些任务可能是不明智的。

是否有任何方法可以使用 redis 代理处理这些任务?我知道这个问题。更换经纪人是唯一的选择吗?

NG.*_*NG. 1

我通过以下方式使用 redis 执行此操作:

我们的客户可以安排发布一些内容。我们将版本及其执行时间存储在数据库中。

然后,我们使用 celerybeat 执行定期任务(每小时或适合您的时间),检查我们的发布表中是否有计划在下一个周期(每小时或适合您的时间)内安排的发布。如果找到的话,我们就会用 celery 为他们安排一个任务。这使我们的预计到达时间较短。