芹菜'max_retries`被击中后会发生什么?

时间:2016-01-18 03:10:01

标签: python celery

我熟悉Celery在任务上的max_retries选项 - 它确保任务的重试次数不会超过这么多次。

然而, 之后会发生什么? (例如,如果因为错误一直被击中而被击中)任务被简单地丢弃,或者是否由于错误,是抛出错误并且管理员通过电子邮件发送(如果CELERY_SEND_TASK_ERROR_EMAILS设置为True })?

1 个答案:

答案 0 :(得分:2)

我相信该任务将运行其on_failure()方法(在最终尝试期间触发),然后是after_return()方法。如果需要在Task类中,可以覆盖其中任何一个。先前尝试与最终失败之间的区别在于最终尝试不会引发celery.exceptions.Retry;一个内部异常,重新排列任务。

如果在CELERY_SEND_TASK_ERROR_EMAILS设置为True的任务期间发生异常,则应通过电子邮件发送用户列表。我认为这是每次任务失败时,如果max_retries设置为5并且任务全部失败,则应该收到5封电子邮件(虽然没有测试过)。

请务必注意,电子邮件触发器不包含Celery异常(由于代码路径),因此您不会收到有关达到Max Retries(或重试异常)的电子邮件。如果您还需要最多重试的电子邮件,则可以覆盖after_return并检查重试次数和/或状态。

我相信在这一点上,任务将不再在队列/信使中,但根据您的设置,您应该在后端有一个条目,在那里您可以看到任务失败max_retries次,然后最终提出了MaxRetriesExceededError。

如果使用EAGER任务,您可能希望设置

CELERY_EAGER_PROPAGATES_EXCEPTIONS = True.

感兴趣: Recover from task failed beyond max_retries