2017-04-15 185 views
2

所以,我有一个代码,这需要在输入和集群启动火花的工作。所以,像如何并行Python中执行多个命令的bash

spark-submit driver.py -i input_path 

现在,我的路径列表我想执行所有这些simulatenously ..

这里是我试过

base_command = 'spark-submit driver.py -i %s' 
for path in paths: 
    command = base_command%path 
    subprocess.Popen(command, shell=True) 

我的希望是,所有的shell命令将被同时执行,而是,我注意到THA它一次执行一条命令..

如何同时执行所有bash命令。 谢谢

+0

做什么? – Labo

+0

@Labo:naah ..只是并行执行它们.. – Fraz

+0

是什么让你觉得它们不是并行执行? – Labo

回答

2

这是游泳池进来,它是专为这种情况下。它将许多输入自动映射到多个线程。 Here是如何使用它的好资源。

from multiprocessing import Pool 

def run_command(path): 
    base_command = 'spark-submit driver.py -i %s' 
    command = base_command%path 
    subprocess.Popen(command, shell=True) 

pool = Pool() 
pool.map(run_command, paths) 

这将创建在路径每个项目一个线程,并在同一时间运行所有这些给定输入您希望能够告诉时,他们都完成

+1

这太棒了:D:D:D – Fraz

+0

这并不相关。 Popen方法没有阻塞,所以你不需要池... – Labo