2013-03-21 43 views
0

我的代碼如下。調用concurrent.futures並行作業的麻煩

executor = concurrent.futures.ThreadPoolExecutor(max_workers=4) 

for cj in self.parent_job.child_jobs: 
    executor.map(cj.runCommand()) 

高清runCommand(個體經營): 使用os.system(self.cmd_line) verifyOutputFiles() ...

runCommand需求並行所有child_jobs執行。一次只能將一個child_job傳遞給runCommand。

但runCommand一次只能調用一次。但是我需要在同一時間爲所有兒童工作調用它。任何有助於實現這一目標,在executor.map API認識

回答

1

看:http://docs.python.org/dev/library/concurrent.futures.html#concurrent.futures.Executor.map 您可以通過調用函數並傳遞它的結果map犯的錯誤;)這就是爲什麼你的代碼運行一次。

您需要創建一個單獨的功能,這將在對象的方法runCommand被稱爲你不能通過lambda x: x.runCommand()(一般拉姆達)作爲參數傳遞給executor.map

def runCommand(cj): 
    return cj.runCommand() 

l = executor.map(runCommand, self.parent_job.child_jobs) 

等到所有任務compleate你必須評估發電機l。所以你可以做w = list(l)w將包含結果

+0

child_jobs有要執行的命令列表。我需要並行運行它們。 – Hema 2013-03-21 13:47:25

+0

cj只有一個子作業,self.parent_job.child_jobs有所有子作業的列表。如果我們像executor.map(cj.runCommand,self.parent_job.child_jobs)一樣執行,哪一個會到達runCommand – Hema 2013-03-21 13:56:42

+0

我不確定@AndrewDalke建議的是什麼。我認爲'cj.runCommand'綁定到'cj'實例,所以對我來說沒有意義。我認爲我發佈的內容應該有效 - @ user2194611你試過了嗎? – kkonrad 2013-03-21 21:51:47