我正在使用TriggerDagRunOperator,以便一个控制器DAG可以触发目标DAG。但是,一旦控制器DAG触发了目标DAG,目标DAG就会切换到“运行”状态,但是没有计划任何任务。我希望目标DAG由控制器DAG触发后立即安排任务。
# Controller DAG's callable
def conditionally_trigger(context, dag_run_object):
condition_param = context['params']['condition_param']
if condition_param:
return dag_run_obj
return None
# Target DAG's callable
def say_hello():
print("Hello")
# Controller DAG
controller_dag = DAG(
dag_id="controller",
default_args = {
"owner":"Patrick Stump",
"start_date":datetime.utcnow(),
},
schedule_interval='@once',
)
# Target DAG
target_dag = DAG(
dag_id="target",
default_args = {
"owner":"Patrick Stump",
"start_date":datetime.utcnow(),
},
schedule_interval=None,
)
# Controller DAG's task
controller_task = TriggerDagRunOperator(
task_id="trigger_dag",
trigger_dag_id="target",
python_callable=conditionally_trigger,
params={'condition_param':True},
dag=controller_dag,
)
# Target DAG's task -- never scheduled!
target_task = PythonOperator(
task_id="print_hello",
python_callable=say_hello,
dag=target_dag,
)
预先感谢:)
答案 0 :(得分:1)
问题可能出在使用像这样的动态开始日期:"start_date":datetime.utcnow(),
我将重命名dag,并给它们一个开始日期,例如2019-01-01,然后再试一次。
调度程序会重复读取DAG,并且每次解析DAG时开始日期都会更改(utcnow()
每次都会计算为新值),