Python 气流Dag故障回调被多次调用

Python 气流Dag故障回调被多次调用,python,airflow,Python,Airflow,我遇到一个问题,即多次调用on\u failure\u callback功能 目前,我的主Dag分为1个PythonOperator和4个SubDag,每个SubDag由多个PythonOperator组成 t_python_1 >> t_subdag_2 >> t_subdag_3 >> t_subdag_4 >> t_subdag_5 __t_subdag_2__: t_sub2_python_1 >> t_sub2_python

我遇到一个问题,即多次调用
on\u failure\u callback
功能

目前,我的主Dag分为1个PythonOperator和4个SubDag,每个SubDag由多个PythonOperator组成

t_python_1 >> t_subdag_2 >> t_subdag_3 >> t_subdag_4 >> t_subdag_5

__t_subdag_2__:
t_sub2_python_1 >> t_sub2_python_2 t_sub2_python_3

...
在设置过程中,在mainDagdefault\u args中,我添加了一个
on\u failure\u callback
选项。对于每个子DAG,我将其设置为
None

Args main
Dag

DEFAULT_ARGS_MAINDAG = {
    "owner"               : "airflow",
    "depends_on_past"     : False,
    "start_date"          : days_ago(2),
    "retries"             : 2,
    "retry_delay"         : timedelta(seconds=30),
    "on_failure_callback" : custom_failure_handle,
}
DEFAULT_ARGS_SUBDAG = {
    "owner"               : "airflow",
    "depends_on_past"     : False,
    "start_date"          : days_ago(2),
    "retries"             : 2,
    "retry_delay"         : timedelta(seconds=30),
    "on_failure_callback" : None,
}
Args
SubDag

DEFAULT_ARGS_MAINDAG = {
    "owner"               : "airflow",
    "depends_on_past"     : False,
    "start_date"          : days_ago(2),
    "retries"             : 2,
    "retry_delay"         : timedelta(seconds=30),
    "on_failure_callback" : custom_failure_handle,
}
DEFAULT_ARGS_SUBDAG = {
    "owner"               : "airflow",
    "depends_on_past"     : False,
    "start_date"          : days_ago(2),
    "retries"             : 2,
    "retry_delay"         : timedelta(seconds=30),
    "on_failure_callback" : None,
}
但是当我运行Dag并检查任务时,似乎每个子Dag的任务都将
on\u failure\u回调设置为custom\u failure\u handle,而不是
None
。 因此,在执行过程中,如果一个子Dag任务失败,则调用两次
on\u failure\u callback
:在主Dag子Dag

t_python_1 >> t_subdag_2 >> t_subdag_3 >> t_subdag_4 >> t_subdag_5

__t_subdag_2__:
t_sub2_python_1 >> t_sub2_python_2 t_sub2_python_3

...

这是否可能为父DagSubDag单独配置,以确保故障回调不会被调用两次?

因此问题不在
方面,而是在我实现的服务中,为我的
子Dag
创建了默认参数。基本上,
SubDag
默认参数总是被主
Dag
参数覆盖


当然,您可以通过与常规
Dag
相同的方式为每个
子Dag
传递不同的配置,这可能是因为您有
“重试”:2
配置;因此,每次失败的尝试都会调用
on_failure_callback
(虽然从技术上讲,应该调用三次:原始运行失败+2次重试尝试失败)@y2k shubham,难道不应该在所有重试失败后才调用它吗?好的,我的坏;我把它和回调时的
搞混了。Zat42“是”
on_failure\u callback
仅在任务最终标记为
FAILED
时才有效(不适用于间歇性故障,因为此时任务的状态为
UP\u FOR_RETRY