气流任务无法启动

时间:2017-07-06 15:05:45

标签: python parallel-processing airflow

我有以下简单的DAG

dag = DAG('test_parallel',
        description='Simple tutorial DAG',
        schedule_interval=None,
        start_date=datetime(2017, 3, 20),
        catchup=False)


def first_echo(arg):
    print('\n\n')
    print('FIRST ECHO! %s' % arg)

def second_echo(arg):
    print('\n\n')
    print('SECOND ECHO! %s' % arg)

def final_echo():
    print('\n\n')
    print('FINAL ECHO: ')

final_echo = PythonOperator(task_id='final_echo' , dag=dag, provide_context=False, python_callable=final_echo)

for i in range(5):
    first_echo_op = PythonOperator(task_id='first_echo_%s' % i, python_callable=first_echo, op_args=[i], dag=dag)
    second_echo_op = PythonOperator(task_id='second_echo_%s' % i, python_callable=second_echo, op_args=[i], dag=dag)

    first_echo_op.set_downstream(second_echo_op)
    second_echo_op.set_downstream(final_echo)

我的想法是,我有一系列五个独立的任务,每个任务都会导致以下任务,并且它们都会聚合到最终任务中。

问题是,在second_echo个任务完成之前,我的first_echo任务都不会启动。由于first_echo任务都是独立,并且每个second_echo任务仅依赖于之前的独立first_echo任务,我认为他们会这样做一旦有可用的资源就运行......

如果需要,我可以提供甘特图。

问题是:假设我拥有适当数量的资源,我如何尽快在DAG中运行独立路径,而不是等待所有第一个任务完成。< / p>

1 个答案:

答案 0 :(得分:0)

您的DAG在我的环境中按预期工作。

如果我在第一个任务中添加一个随机延迟,强迫一些人提前完成,如下所示:

def first_echo(arg):
  time.sleep(random.randint(0, 30))
  print('\n\n')
  print('FIRST ECHO! %s' % arg)

我得到了预期的并行执行模式(使用LocalExecutor): enter image description here