气流-从自定义对象生成DAG

时间:2019-09-18 12:01:51

标签: python airflow

我正在使用气流1.10.3。我正在尝试创建一个可以实例化多次以为我生成DAG的类。这是一个简化的示例:

from airflow import DAG
from airflow.operators.python_operator import PythonOperator


class DagClass:

    def __init__(self, dag_id):
        self.dag_id = dag_id


    def test_function():
        print("test 1")

    def test_function2():
        print("test 2")


    def generate_dag(self):
        dag = DAG(self.dag_id)

        task1 = PythonOperator(
                  task_id="test",
                  python_callable=self.test_function,
                  provide_context=True,
                  dag=dag
                )

        task2 = PythonOperator(
                task_id="test2",
                python_callable=self.test_function2,
                provide_context=True,
                dag=dag
                )

        task1.set_downstream(task2)

        return dag

然后,我尝试使用该类在此处的另一个文件中创建DAG:

from airflow import DAG
from dynamic_dag_test.dag_class import DagClass

dag_class = DagClass('test_dynamic_dag')

dag = dag_class.generate_dag()

globals()['test_dynamic_dag'] = dag

但是,如果执行此操作,不会出现任何错误,但是DAG永远不会显示在Web UI中。但是,如果我改掉该类,而直接从另一个文件中导入该函数,则效果很好。

有人知道这是为什么吗,以及我如何使它与班级一起工作?谢谢!

1 个答案:

答案 0 :(得分:0)

我也可以使用 Airflow 1.10.1 确认 comment of David Schuler。我们必须将导入语句 (from airflow import DAG) 放在 Python 文件的顶部。