如何设置两名工人在气流中

时间:2018-06-25 17:29:04

标签: python airflow airflow-scheduler

我有两个工人和三个任务。

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完成。

1 个答案:

答案 0 :(得分:4)

除了启动两个工作程序外,您无需执行任何其他操作,它们将在任务可用时并在您配置中定义的并发/并行性约束下拾取任务。

在您给出的示例中,任务可能完全运行一个worker 1worker 2或两者混合运行。这是因为t2t1完成之前不会启动。在t1完成和t2开始之间的时间里,两个工作人员都将处于空闲状态(假设您没有其他的dag在运行)。保留t2任务以运行将赢得比赛。

如果需要让特定任务在不同的工作线程上运行(例如,让一个或多个工作人员具有更高级别的可用资源或特殊的硬件),则可以在任务级别指定队列。队列不会影响任务的运行顺序,因为Airflow调度程序将确保在成功运行上游任务之前,任务不会运行。