我有两个工人和三个任务。
dag = DAG('dummy_for_testing', default_args=default_args)
t1 = BashOperator(
task_id='print_task1',
bash_command='task1.py',
dag=dag)
t2 = BashOperator(
task_id='print_task2',
bash_command='task2.py',
dag=dag)
t3 = BashOperator(
task_id='print_task3',
bash_command='task3.py',
dag=dag)
t1 >> t2 >> t3
比方说,我正在特定文件上执行tasks(t1,t2,t3)
。当前,所有工作都在一个工作程序上进行,但是我想设置另一个工作程序,该工作程序将接收第一个任务的输出并执行任务t2,然后执行任务t3。这样,queue1
将对下一个文件执行t1
。我该如何为两名工人做这项工作。我正在考虑使用queues
,但不知道如何让queue2
等到t1
中的任务queue1
完成。
答案 0 :(得分:4)
除了启动两个工作程序外,您无需执行任何其他操作,它们将在任务可用时并在您配置中定义的并发/并行性约束下拾取任务。
在您给出的示例中,任务可能完全运行一个worker 1
,worker 2
或两者混合运行。这是因为t2
在t1
完成之前不会启动。在t1
完成和t2
开始之间的时间里,两个工作人员都将处于空闲状态(假设您没有其他的dag在运行)。保留t2
任务以运行将赢得比赛。
如果需要让特定任务在不同的工作线程上运行(例如,让一个或多个工作人员具有更高级别的可用资源或特殊的硬件),则可以在任务级别指定队列。队列不会影响任务的运行顺序,因为Airflow调度程序将确保在成功运行上游任务之前,任务不会运行。