DAG触发后如何安排DAG任务?

时间:2019-06-11 13:18:42

标签: airflow airflow-scheduler

我正在使用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,
)

预先感谢:)

1 个答案:

答案 0 :(得分:1)

问题可能出在使用像这样的动态开始日期:"start_date":datetime.utcnow(),

我将重命名dag,并给它们一个开始日期,例如2019-01-01,然后再试一次。

调度程序会重复读取DAG,并且每次解析DAG时开始日期都会更改(utcnow()每次都会计算为新值),

Here is some further reading on start_date.