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() ...

runCommand は、すべての child_jobs に対して並行して実行する必要があります。また、一度に runCommand に渡すことができる child_job は 1 つだけです。

ただし、runCommand は一度に 1 回だけ呼び出されます。しかし、すべての子ジョブに対して同時に呼び出す必要があります。これを達成するための助けをいただければ幸いです

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()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 に答える