无法将任务添加到返回管道的功能(Airflow,DAG)

时间:2019-03-28 15:34:35

标签: python airflow

我有一个函数,主要用于添加到每个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

2 个答案:

答案 0 :(得分:0)

也许我遗漏了一些东西,但是听起来您可以将task_new的{​​{1}}值设为trigger_rule,以确保所有上游任务在触发之前都已成功完成,然后编排这样的任务:

all_success

答案 1 :(得分:0)

您可以返回包含第一个和最后一个任务a, c的元组。然后 task_n >> common.finalize[0] common.finalize[1] >> task_new