Limit on Python Celery eta?



Celery对任务的eta有限制吗?我想在12天后执行方法foo,Celery对此会有问题吗?或者我需要为这么长的eta配置任何Celery设置吗?

next_run = datetime.now() + timedelta(days = 12)
foo.apply_async(args=[], eta = next_run)

这取决于您使用的代理和一些配置,如visibility_timeout

当设置了ETA的任务进入队列时,它会由工作人员尽快获取,而不是在ETA。工人将任务保持到ETA,然后执行它。工作人员在代理处理任务时对其进行确认;因此代理知道何时可以安全地删除任务消息。

一些代理,如Redis和SQS,如果工作人员在一段时间内没有确认任务,就会认为该任务丢失,称为visibility_timeout。在这种情况下,它允许另一个工作者接收任务消息。

回到您的案例,如果您使用的是Redis,其默认visibility_timeout为1小时,则将任务延迟12天可能会导致多次执行任务,如12*24次,具体取决于您的员工数量。

visibility_timeout增加到12天以上可能是诱人的。请注意,它有效地禁用了确认机制,这是有充分理由的。

我建议您使用以visibility_timeout为间隔运行的cron任务来扫描应该很快执行的任务,并在它们的实际ETA将它们排队。

参考:

  • 可见性超时
  • 确认

相关内容

  • 没有找到相关文章

最新更新