我熟悉Celery在任务上的max_retries
选项 - 它确保任务的重试次数不会超过这么多次。
然而, 之后会发生什么? (例如,如果因为错误一直被击中而被击中)任务被简单地丢弃,或者是否由于错误,是抛出错误并且管理员通过电子邮件发送(如果CELERY_SEND_TASK_ERROR_EMAILS
设置为True
})?
答案 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.