def handle_retry(self, exc, exc_info): """Handle retry exception.""" ### Task is to be retried. type_, value_, tb = exc_info strtb = "\n".join(traceback.format_exception(type_, value_, tb)) # RetryTaskError stores both a small message describing the retry # and the original exception. message, orig_exc = exc.args default_backend.mark_as_retry(self.task_id, orig_exc, strtb) # Create a simpler version of the RetryTaskError that stringifies # the original exception instead of including the exception instance. # This is for reporting the retry in logs, e-mail etc, while # guaranteeing pickleability. expanded_msg = "%s: %s" % (message, str(orig_exc)) retval = ExceptionInfo((type_, type_(expanded_msg, None), tb)) # Run retry handler last to be sure the status is saved. retry_handler = getattr(self.fun, "on_retry", noop) retry_handler(exc, self.task_id, self.args, self.kwargs) return retval
def save_result(task): traceback = "Some traceback" if task["status"] == states.SUCCESS: default_backend.mark_as_done(task["id"], task["result"]) elif task["status"] == states.RETRY: default_backend.mark_as_retry(task["id"], task["result"], traceback=traceback) else: default_backend.mark_as_failure(task["id"], task["result"], traceback=traceback)