I’m using Task Inheritance in celery to retry (max_retries: 3) on certain exceptions, and log failures.
Is on_failure called on each failed attempt or only after the last attempt (the 3rd in my case)?
def __call__(self, *args, **kwargs):
        try:
            return self.run(*args, **kwargs)
        except InterfaceError as exc:
            self.retry(exc=exc, countdown=5, max_retries=3)
def on_failure(self, exc, task_id, args, kwargs, einfo):
    log(exc)  # This is a gross simplification of the logging
Advertisement
Answer
Tested this and on_failure is only run after the retries have all failed.
So, using the example given above, on_failure is called after the 3rd failure.