You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow中能否设置多阶retry_delay?需新增12小时二次重试

解决Airflow DAG多间隔重试的问题

可以实现,但原生的retry_delay不支持直接传入多个值列表,不过你可以通过自定义可调用函数精确控制每次重试的间隔,或者结合指数退避参数近似实现。下面是两种可行方案:

方案1:自定义重试延迟函数(精确匹配需求)

将retry_delay设置为一个接收当前重试次数(try_number)的函数,根据重试次数返回对应的延迟时长。同时记得把retries改为2(对应两次重试:第一次10分钟,第二次12小时)。

修改后的代码示例:

from datetime import timedelta

def custom_retry_delay(try_number):
    # try_number从1开始计数,第一次重试对应try_number=1
    if try_number == 1:
        return timedelta(minutes=10)
    elif try_number == 2:
        return timedelta(hours=12)
    # 若设置更多重试次数,可自定义默认延迟
    return timedelta(hours=24)

globals()[name] = dag = DAG(
    dag_id=name,
    tags=tags,
    default_args={
        'email_on_failure': True,
        'retries': 2,  # 调整为2次重试
        'retry_delay': custom_retry_delay  # 绑定自定义延迟函数
    },
    catchup=False,
    schedule_interval=schedule_interval,
    start_date=DEFAULT_START_DATE.replace(tzinfo=timezone),
)

方案2:使用指数退避(近似实现)

如果可以接受非精确的间隔,Airflow支持retry_exponential_backoff参数,开启后重试间隔会按指数增长。你可以通过调整参数接近需求,但这种方式无法严格匹配10分钟+12小时的组合,仅作备选:

globals()[name] = dag = DAG(
    dag_id=name,
    tags=tags,
    default_args={
        'email_on_failure': True,
        'retries': 2,
        'retry_delay': timedelta(minutes=10),
        'retry_exponential_backoff': True,  # 开启指数退避
        'max_retry_delay': timedelta(hours=12)  # 限制最大重试延迟
    },
    catchup=False,
    schedule_interval=schedule_interval,
    start_date=DEFAULT_START_DATE.replace(tzinfo=timezone),
)

注意事项

  • try_number从1开始计数,第一次重试对应try_number=1,第二次对应try_number=2。
  • 自定义延迟函数需要Airflow 1.10.10及以上版本支持。

内容的提问来源于stack exchange,提问作者TwanK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:55:04