2015-12-16 24 views
0

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

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

您是否尝试过???好吧,你必须要有耐心

+0

在虚拟机中试一试 - 然后你可以修改系统时间而不会破坏东西 – scytale

+0

@brunodesthuilliers:是的,试过了..我想我会在12天内知道.. – ofey

回答

1

这取决于你所使用的经纪人和一些配置像visibility_timeout

当一个ETA设置的任务被排队时,它会被一个工作者asap而不是ETA取回。工作人员将任务持续到ETA并执行。工作人员在处理任务时会a the经纪人;所以代理知道何时可以安全删除任务消息。

有些经纪人,如Redis和SQS,认为任务在工作人员未确认一段时间后会丢失,称为visibility_timeout。在这种情况下,它允许其他工作人员接收任务消息。回到你的案例,如果你使用Redis,默认visibility_timeout为1小时,推迟12天的任务可能会多次执行任务,如12 * 24次,这取决于你的数量工人。

visibility_timeout增加到12天以上可能是诱人的。请注意,它会有效地禁用确认机制,该机制存在的原因很充分。

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

参考文献: