我想将其他参数传递给我的on_failure_callback函数,但似乎只需要“上下文”。我如何将其他参数传递给该函数……尤其是因为我想在一个单独的模块中定义该函数,以便可以在我的所有DAGS中使用它。
我当前的default_args如下:
default_args = {
'owner': 'Me',
'depends_on_past': True,
'start_date': datetime(2016,01,01),
'email': ['me@me.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=1),
'on_failure_callback': notify_failure,
'max_active_runs': 1
}
如果我尝试这种气流抱怨的话:
default_args = {
'owner': 'Me',
'depends_on_past': True,
'start_date': datetime(2016,01,01),
'email': ['me@me.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=1),
'on_failure_callback': notify_failure(context,arg1,arg2),
'max_active_runs': 1
}
所以不确定如何将arg1和arg2传递给我想在一个单独的模块中定义的notify_failure函数,该模块可以简单地导入到DAG中。
答案 0 :(得分:4)
假设您可以在DAG级别定义args,然后可以使用partials包。即:
from functools import partial
def generic_failure(arg1, arg2, context):
# do whatever
default_args = {
'owner': 'Me',
'depends_on_past': True,
'start_date': datetime(2016,01,01),
'email': ['me@me.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=1),
'on_failure_callback': partial(generic_failure, arg1, arg2),
'max_active_runs': 1
}
调用partial(generic_failure, arg1, arg2)
将返回一个函数,该函数期望generic_failure
中剩余许多参数,在上例中,该参数只是单个参数context
答案 1 :(得分:1)
您可以为此使用嵌套函数
def generic_failure(arg1, arg2):
def failure(context):
message = 'we have a function that failed witg args : {ARG1}, {ARG2}'.format(ARG1=arg1,ARG2=arg2)
print(message)
return message
return failure
arg1 = 'arg1'
arg2 = 'arg2'
default_args = {
'owner': 'Me',
'on_failure_callback': generic_failure(arg1, arg2),
}