0

我的代码如下。

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 一次只被调用一次。但我需要同时为所有子作业调用它。任何帮助实现这一目标表示赞赏

4

1 回答 1

1

查看executor.mapAPI: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)

要等到所有任务完成,您必须评估 generator l。所以你可以做w = list(l)并将w包含结果

于 2013-03-21T10:23:55.003 回答