我的代码如下。
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一次只能被调用一次。但我需要同时为所有子作业调用它。任何帮助实现这一点是值得赞赏的
答案 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
将包含结果