【问题标题】:Scheduling celery tasks with large ETA用大 ETA 调度 celery 任务
【发布时间】:2017-08-04 23:59:07
【问题描述】:

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

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

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

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

是否有任何通过 redis 代理处理这些任务的途径?我知道this question。更换经纪人是唯一的选择吗?

【问题讨论】:

标签: python redis celery


【解决方案1】:

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

我们的客户可以安排发布他们的部分内容。我们将发布与它应该执行的时间一起存储在我们的数据库中。

然后,我们使用 celery beat 执行定期任务(每小时或适合您的方式),检查我们的发布表以查找在下一个时期内安排的发布(再次小时或适合您的方式)。如果找到任何东西,我们就会用芹菜为他们安排一个任务。这让我们的预计到达时间很短。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2015-08-28
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2012-09-22
    相关资源
    最近更新 更多