Airflow 迭代气流执行

Airflow 迭代气流执行,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我有下面的DAG和一些简单的任务 hour_list = [“0:00”, “1:00", “2:00”] for hour in hour_list: bash_op = BashOperator( task_id=‘task1_op1’+hour ,bash_command=“date” ,dag=dag ) py_op = PythonOperator(

我有下面的DAG和一些简单的任务

hour_list = [“0:00”, “1:00", “2:00”]

 for hour in hour_list:
    bash_op = BashOperator(
                task_id=‘task1_op1’+hour
                ,bash_command=“date”
                ,dag=dag
         )


    py_op = PythonOperator(
            task_id='doit’+hour,
            provide_context=True,
            python_callable=python_method,
            dag=dag)

    py_op.set_upstream(bash_op)

现在,我看到dag在0:00到2:00的所有时间内并行执行。这是意料之中的行为。但是,我想一个小时一个小时地运行DAG,就像第二个小时的执行取决于第一个小时一样。我不确定设置中的任何更改是否有帮助。我欣赏你的想法。谢谢。

您可以使用
气流、操作员、传感器、时间传感器来完成这项任务。类似于以下内容:

from datetime import time

from airflow.operators.sensors import TimeSensor

[...]

for hour in ["00:00", "01:00", "02:00"]:
    TimeSensor(
        dag=dag,
        task_id="wait_{}".format(hour),
        target_time=time(*map(int, hour.split(":")))
    ) >> BashOperator(
        dag=dag,
        task_id="task1_op1_{}".format(hour),
        bash_command="date"
    ) >> PythonOperator(
        dag=dag,
        task_id="doit_{}".format(hour),
        provide_context=True,
        python_callable=python_method
    )

您希望它们在完成时连续运行,还是希望它们在
hour\u list
变量列出的特定时间成功运行?我的第一个要求是以一小时一小时的迭代方式运行dag。另外,我想在dag在前一个小时失败后停止迭代。谢谢。有没有理由不简单地设置
DAG
schedule\u interval=timedelta(hours=1)
?我想在DAG内每小时运行一些任务,最后根据DAG计划在一天结束时运行一些任务(每天一次)。因此,我可能不会在DAG级别设置每小时的时间表。但是,如果日期是过去的,那么DAG将开始在不同的时间并行工作。我想工作,让它一小时一小时地工作,即使日期是过去的日期。因此,我将避免在处理过程中出现一致性。