我正在使用气流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中。但是,如果我改掉该类,而直接从另一个文件中导入该函数,则效果很好。
有人知道这是为什么吗,以及我如何使它与班级一起工作?谢谢!
答案 0 :(得分:0)
我也可以使用 Airflow 1.10.1 确认 comment of David Schuler。我们必须将导入语句 (from airflow import DAG
) 放在 Python 文件的顶部。