我熟悉 Celery 对任务的max_retries
选项——它确保任务的重试次数不会超过这个次数。
但是,达到最大值后会发生什么?(例如,如果它被击中是因为不断抛出错误)任务是否只是被丢弃,或者如果是由于错误,是否抛出错误并通过电子邮件发送管理员(如果CELERY_SEND_TASK_ERROR_EMAILS
设置为True
)?
任务会运行其 on_failure() 方法(在最后一次尝试期间触发),然后是 after_return() 方法。如果需要,可以在 Task 类中重写其中任何一个。以前的尝试和最终失败之间的区别在于,最后一次尝试不会引发芹菜。将任务重新排队的内部异常。
如果在CELERY_SEND_TASK_ERROR_EMAILS设置为 True 的任务期间发生异常,则应通过电子邮件发送用户列表。我认为这是每次任务失败的时间,因此如果max_retries设置为 5 并且任务通过所有 5 次都失败了,您应该收到 5 封电子邮件(尽管尚未对此进行测试)。
请务必注意,电子邮件触发器不包括 Celery 异常(由于代码路径),因此您不会收到达到最大重试次数(或重试异常)的电子邮件。如果您还希望收到一封电子邮件,因为重试次数最多,则可以覆盖after_return并检查重试次数和/或状态。
我相信在这一点上,任务将不再在队列/信使中,但根据您的设置,您应该在后端有一个条目,您可以在其中看到任务失败了 max_retries 次,然后最终引发了 MaxRetriesBeyondError。
如果使用 EAGER 任务,您可能希望设置
CELERY_EAGER_PROPAGATES_EXCEPTIONS = True.
感兴趣的:从任务中恢复失败超过max_retries