无法并行调用concurrent.futures作业

时间:2013-03-21 10:21:26

标签: python

我的代码如下。

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

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

def runCommand(self):      使用os.system(self.cmd_line)      verifyOutputFiles()      ...

需要并行执行所有child_jobs的

runCommand。此外,一次只能将一个child_job传递给runCommand。

但是runCommand一次只能被调用一次。但我需要同时为所有子作业调用它。任何帮助实现这一点是值得赞赏的

1 个答案:

答案 0 :(得分:1)

查看executor.map API:http://docs.python.org/dev/library/concurrent.futures.html#concurrent.futures.Executor.map 你通过调用函数并将结果传递给map来犯错误;)这就是你的代码运行一次的原因。

您需要创建单独的函数,该函数将在方法runCommand的对象上调用,因为您无法将lambda x: x.runCommand()(通常为lambda)作为executor.map的参数传递。

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

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

要等到所有任务完成,你必须评估生成器l。因此,您可以执行w = list(l)w将包含结果