def task_autoretry(*args_task, **kwargs_task):
# https://github.com/celery/celery/pull/2112
def real_decorator(func):
@task(*args_task, **kwargs_task)
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
func(*args, **kwargs)
except kwargs_task.get('autoretry_on', Exception) as exc:
for exclude in kwargs_task.get('autoretry_exclude', []):
if isinstance(exc, exclude):
log.info(
'Wont retry this task because exception '
'"{}" is exclude'.format(str(exc)))
return
if kwargs_task.get('retry_message', False):
log.error(kwargs_task.get('retry_message'), exc_info=True)
wrapper.retry(exc=exc)
return wrapper
return real_decorator
评论列表
文章目录