为何在Airflow的with语句末尾保留task变量?
Airflow中with语句末尾单独写任务变量的原因
先看你给出的示例代码:
from datetime import datetime, timedelta from airflow import DAG from airflow.operators.bash import BashOperator default_args = { 'owner': 'coder2j', 'retries': 5, 'retry_delay': timedelta(minutes=5) } with DAG( default_args=default_args, dag_id="dag_with_cron_expression_v04", start_date=datetime(2021, 11, 1), schedule_interval='0 3 * * Tue-Fri' ) as dag: task1 = BashOperator( task_id='task1', bash_command="echo dag with cron expression!" ) task1 # What does this mean ?
关于末尾单独写task1的原因,可以从这几个角度理解:
- 现代Airflow中属于多余操作:在当前主流的Airflow 2.x及以后版本里,只要在
with DAG(...)的上下文块内实例化Operator(比如这里的BashOperator),Airflow会自动把任务注册到对应的DAG实例中,不需要额外写变量名触发注册。 - 旧版本遗留的习惯:在Airflow 1.x的早期版本中,曾出现过上下文自动注册失效的情况,当时需要显式写出任务变量来确保任务关联到DAG,这个写法被部分开发者保留了下来。
- 可读性标记作用:单独写出
task1可以让阅读代码的人快速识别出当前DAG的核心任务,相当于一种直观的代码标记,明确当前块的关键内容。 - 语法层面无实际影响:从Python语法来说,单独写
task1只是一个无操作的表达式语句,解释器执行它但不会产生任何副作用,既不会新增任务,也不会修改任务属性。
内容的提问来源于stack exchange,提问作者ng.newbie
相关产品推荐
相关产品推荐

