芹菜对任务的eta有限制吗?我想在12天后执行foo方法,芹菜会有问题吗?或者我需要为这么长的eta配置任何芹菜设置吗?
next_run = datetime.now() + timedelta(days = 12)
foo.apply_async(args=[], eta = next_run)发布于 2017-07-13 08:30:04
这取决于您使用的代理程序和一些配置(如visibility_timeout )。
当一个带有ETA集的任务被排队时,它是由一个工作人员尽快获取的,而不是在ETA。工作人员将任务保存到ETA,然后执行它。工作人员在代理处理任务时关闭代理;因此代理知道什么时候可以安全地删除任务消息。
有些代理,如Redis和SQS,如果某个工作人员在一段时间内没有确认任务,就会考虑任务丢失,这称为visibility_timeout。在这种情况下,它允许另一个工作人员接收任务消息。
回到您的情况,如果您使用的是默认的visibility_timeout为1小时的Redis,那么12天的延迟任务最终可能会执行该任务多次,比如12 * 24次,这取决于您的员工数量。
将visibility_timeout提高到超过12天可能很有诱惑力。请注意,它有效地禁用了确认机制,这是有充分理由的。
我建议您使用运行间隔为visibility_timeout的cron任务来扫描应该很快执行的任务,并在实际的ETA中对它们进行排队。
参考文献:
https://stackoverflow.com/questions/34313731
复制相似问题