我有一个函数,主要用于添加到每个DAG的末尾。我们称之为 finalize (完成),它看起来像下面的 Common 类(当然,实际上它在做有用的事情)。我们通常要做的是几乎每个DAG都添加
这样的代码task_1 >> task_2 >> ... task_n >> common.finalize
结果,我们得到了
task_1 >> task_2 >> ... task_n >> a >> b >> c 。
到目前为止,一切都很好。但是,现在,对于一个DAG,我想在完成之后添加一个任务。我不想触摸finalize函数和代码
任务_1 >>任务_2 >> ...任务_n >> common.finalize >>任务_新
帮不上忙,因为 task_new 在 a 之后立即开始。但是我希望 task_new 在 c 之后执行。 有什么建议么? 预先感谢。
class Common(object):
def __init__(self, dag):
self.dag = dag
@property
def finalize(self):
a = BashOperator(
task_id='echo_dag',
bash_command='echo "dag"',
dag=self.dag)
b = BashOperator(
task_id='echo_has_completed',
bash_command='echo "has completed"',
dag=self.dag)
c = BashOperator(
task_id='echo_successfully',
bash_command='echo "successfully"',
dag=self.dag)
a >> b >> c
return a
答案 0 :(得分:0)
也许我遗漏了一些东西,但是听起来您可以将task_new
的{{1}}值设为trigger_rule
,以确保所有上游任务在触发之前都已成功完成,然后编排这样的任务:
all_success
答案 1 :(得分:0)
您可以返回包含第一个和最后一个任务a, c
的元组。然后
task_n >> common.finalize[0]
common.finalize[1] >> task_new