2017-04-15 214 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