Python 理解apache中的树视图

Python 理解apache中的树视图,python,workflow,airflow,apache-airflow,Python,Workflow,Airflow,Apache Airflow,我按原样设置dag,唯一的变化是我已将dag设置为以5分钟的间隔运行,开始日期为2017-12-17 T13:40:00 UTC。我在13:40之前启用了dag,因此没有回填,我的机器在UTC上运行。dag按预期运行(即从UTC 13:45开始每隔5分钟运行一次) 现在,当我转到树视图时,我无法理解图形。总共有3项任务。”sleep'(t2)将上游设置为“printdate”(t1),而“templated”(t3)也将上游设置为“printdate”(t1)。那么为什么图形显示两个“打印日期”

我按原样设置dag,唯一的变化是我已将dag设置为以5分钟的间隔运行,开始日期为2017-12-17 T13:40:00 UTC。我在13:40之前启用了dag,因此没有回填,我的机器在UTC上运行。dag按预期运行(即从UTC 13:45开始每隔5分钟运行一次)

现在,当我转到树视图时,我无法理解图形。总共有3项任务。”sleep'(t2)将上游设置为“printdate”(t1),而“templated”(t3)也将上游设置为“printdate”(t1)。那么为什么图形显示两个“打印日期”??它们是该任务的独立任务实例吗?如果是,那么如何确保只有1个t1任务实例运行(菱形模式)。还有4个绿色矩形框(带有两个“printdate”),而不是3个

# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag)

t2 = BashOperator(
    task_id='sleep',
    bash_command='sleep 5',
    retries=3,
    dag=dag)

templated_command = """
    {% for i in range(5) %}
        echo "{{ ds }}"
        echo "{{ macros.ds_add(ds, 7)}}"
        echo "{{ params.my_param }}"
    {% endfor %}
"""

t3 = BashOperator(
    task_id='templated',
    bash_command=templated_command,
    params={'my_param': 'Parameter I passed in'},
    dag=dag)

t2.set_upstream(t1)
t3.set_upstream(t1)
第二,为什么dag上的时间(绿色圆圈)显示为8.40,8.45-?那是什么时间/时区?我已将dag的开始日期设置为13.40,我的机器设置为UTC


是的,它们是独立的任务。要确保只有一个
打印日期
,您可以执行以下操作:

t1 >> t2 >> t3
而不是

t2.set_upstream(t1)
t3.set_upstream(t1) 
您可以根据您的工作流程更改订单


2.在我的机器上,这些绿点以UTC显示计划运行的时间。您确定不在您的数据库时区中吗?

它们不是单独的实例。你可以看到:

  • 在树状视图中,两个圆圈的开始/结束日期和持续时间将完全相同

  • 在甘特图视图中,您将只看到
    print\u date
    的单个实例的持续时间


  • 通常,如果不复制节点,就无法将DAG映射到树视图,就像它们所做的那样

    那些认为
    睡眠
    模板化
    的人应该从单个
    打印日期
    任务(在树状视图中)分支出来,应该阅读