2024-04-26 23:06:55 发布
网友
我创建了一个工作流(包含少量任务)。每小时执行一次。仅当工作流的另一个实例未同时运行时,才应触发工作流。如果工作流正在运行,则应跳过该小时的工作流执行。
我查过“依你过去而定”,但没找到。
将DAG上的max_active_runs设置为1,同时将catchup设置为False
DAG
max_active_runs
catchup
False
从official Airflow documentation for trigger rules:
当设置为True时,depends_on_past(boolean)可防止任务在之前的计划未成功时被触发。在
depends_on_past
如果您在任务定义中使用它,它将起作用。您也可以将它与wait_for_downstream= True配对,以保证新运行的实例在任务的最后一次运行的实例完成执行之前不会开始。在
wait_for_downstream= True
task_depends = DummyOperator( task_id= "task_depend", dag= dag, depends_on_past= True )
然而,另一种解决此问题的方法是使用Latest Run Only concept:
标准工作流行为涉及在特定日期/时间范围内运行一系列任务。但是,有些工作流执行独立于运行时但需要按计划运行的任务,这与标准cron作业非常相似。在这些情况下,在暂停期间错过的回填或运行作业只会浪费CPU周期。在
对于这种情况,可以使用LatestOnlyOperator跳过在最近一次计划运行期间未运行的任务。如果现在的时间不在它的execution_time和下一个计划的execution_time之间,LatestOnlyOperator将跳过所有直接的下游任务和自身。在
LatestOnlyOperator
execution_time
将
DAG
上的max_active_runs
设置为1,同时将catchup
设置为False
从official Airflow documentation for trigger rules:
当设置为True时,
depends_on_past
(boolean)可防止任务在之前的计划未成功时被触发。在如果您在任务定义中使用它,它将起作用。您也可以将它与
wait_for_downstream= True
配对,以保证新运行的实例在任务的最后一次运行的实例完成执行之前不会开始。在然而,另一种解决此问题的方法是使用Latest Run Only concept:
标准工作流行为涉及在特定日期/时间范围内运行一系列任务。但是,有些工作流执行独立于运行时但需要按计划运行的任务,这与标准cron作业非常相似。在这些情况下,在暂停期间错过的回填或运行作业只会浪费CPU周期。在
对于这种情况,可以使用
LatestOnlyOperator
跳过在最近一次计划运行期间未运行的任务。如果现在的时间不在它的execution_time
和下一个计划的execution_time
之间,LatestOnlyOperator
将跳过所有直接的下游任务和自身。在相关问题 更多 >
编程相关推荐