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
...
在设置过程中,在mainDag的default\u args中,我添加了一个on\u failure\u callback
选项。对于每个子DAG,我将其设置为None
Args mainDag
:
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,
}
ArgsSubDag
:
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
...
这是否可能为父Dag和SubDag单独配置,以确保故障回调不会被调用两次?因此问题不在方面,而是在我实现的服务中,为我的子Dag
创建了默认参数。基本上,SubDag
默认参数总是被主Dag
参数覆盖
当然,您可以通过与常规Dag
相同的方式为每个子Dag
传递不同的配置,这可能是因为您有“重试”:2
配置;因此,每次失败的尝试都会调用on_failure_callback
(虽然从技术上讲,应该调用三次:原始运行失败+2次重试尝试失败)@y2k shubham,难道不应该在所有重试失败后才调用它吗?好的,我的坏;我把它和回调时的搞混了。Zat42“是”on_failure\u callback
仅在任务最终标记为FAILED
时才有效(不适用于间歇性故障,因为此时任务的状态为UP\u FOR_RETRY
)