芹菜:拒绝和重试有什么区别?

时间:2016-04-28 19:00:59

标签: python celery

我正在详细阅读关于拒绝和重试任务的Celery文档(链接here)。致电raise self.retry(exc=exc)和致电raise Reject(exc, requeue=True)之间有什么区别?如果你要在拒绝时重新排队,那两者之间有什么区别吗?你为什么要一个做另一个?

这尤其令人困惑,因为文档会针对Reject发出明确的无限循环警告,但不会针对self.retry()发出警告。

1 个答案:

答案 0 :(得分:2)

如果你重试任务,就像这样

raise self.retry(exc=exc)

它只会重试3次(默认)。您还可以指定要重试的次数。

raise self.retry(exc=exc, max_retries=10)

这将最多重试10次

另一方面,当你拒绝并取消它时,你可能会进入无限循环,因为没有最大限制

如果要从第三方服务获取数据,则可以使用重试。即使第三方服务停止了几秒钟,这也将确保您获得数据。

我还没有在任何地方使用Reject。让我们说,您想要连接到服务器上的端口8000,并且还有一些其他进程偶尔会连接到同一个端口。

现在,在您的任务中,您可以尝试连接到端口,如果某个进程正在使用该端口,您可以简单地拒绝它并重新排队。这将发生,直到另一个进程停止监听8000并且您的任务最终将被执行。

但你必须确保,你将有机会成功执行任务,否则你将陷入困境。