我正在尝试在测试环境中测试一个具有多个任务的dag。我能够测试与dag相关的单个任务,但我想在第一个任务的dag和kick中创建几个任务。 为了测试dag中的一个任务我正在使用
task1.run()
正在执行。但是,当我在dag的下游一个接一个地完成许多任务时,同样不起作用。
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['airflow@example.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
# 'queue': 'bash_queue',
# 'pool': 'backfill',
# 'priority_weight': 10,
# 'end_date': datetime(2016, 1, 1),
}
dag = DAG('tutorial', default_args=default_args)
# 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)
t2.set_upstream(t1)
t1.run() # It is executing just first task.
为了运行第二个任务,我必须使用t2.run()运行,在设计DAG时我不想要这个。怎么做到这一点?
答案 0 :(得分:7)
我不太确定我是否理解您的问题,但是我会尽力开始回答。
如果您的目标是仅手动运行DAG或其一部分任务,则可以从CLI实现,例如:
$ airflow run ...
-运行任务实例$ airflow test ...
-测试任务实例,而无需检查依赖关系或记录数据库中的状态$ airflow trigger_dag ...
-触发DAG的特定DAG运行CLI文档- https://airflow.apache.org/cli.html
我认为airflow run命令与您的用例最相关。
在运行时,执行者将自动处理DAG中的任务调度以及满足其要求的下游依赖关系。您无需在代码中的任何地方调用run()。
至于run方法本身,代码仍然存在:
问题