我希望能够从我的代码中发布和触发DAG对象,该代码不受调度程序的控制(即 $ AIRFLOW_HOME / dags 文件夹)
我的最后一招是以编程方式创建一个包含我要发布的DAG定义的py文件,并将此文件保存到 $ AIRFLOW_HOME / dags 文件夹中。 我确定它应该比那更容易。
以下是我的尝试。
import airflow
from airflow import DAG
from datetime import timedelta
from airflow.models import DagPickle
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.db import provide_session
@provide_session
def submit_dag(session=None):
args = {
'owner': 'airflow',
'start_date': airflow.utils.dates.days_ago(2)
}
dag = DAG(
dag_id='sample', default_args=args,
schedule_interval=None, start_date=airflow.utils.dates.days_ago(2),
dagrun_timeout=timedelta(minutes=60))
task = DummyOperator(task_id='one', dag=dag)
dag_pickle = DagPickle(task)
session.add(dag_pickle)
session.commit()
submit_dag()
以上代码确实在 dag_pickle 表中创建了条目但是如何发布并稍后触发此dag?
答案 0 :(得分:0)
我可以做pickle.dump(dag,open(DAGS_FOLDER / pickled_dags,' wb'))并在DAGS FOLDER中有一个文件pickle.load(DAGS_FOLDER / pickled_dags)