私は、任意の関数を並列に実行するために、以下のヘルパー関数を記述しました。Pythonマルチプロセッシングのプールは何もしません
import multiprocessing
def runParallel(fns=[], args=[]):
print('Starting multiprocessing with %i cores' % (multiprocessing.cpu_count() - 1))
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() - 1)
for fn, arg in zip(fns, args):
pool.apply_async(fn, (arg,))
pool.close()
pool.join()
Iは、関数の呼び出しitertools.repeatで関数を呼び出してファイル名のリストが
runParallel(itertools.repeat(self.processFile), fileNamesAndPaths)
processFile署名
def processFile(self, filename):
とクラスメソッドであると始まります'print' - 決して実行されない文。このプログラムは、出力「3コアによるマルチプロセッシングの開始」の後に終了します。
一般的に作品をマルチプロセッシングからプロセスを使用したが、それはそれは扱うことができないプロセスの量と私のCPUをフラッディングし、最終的にフリーズしますが、少なくともprocessFile機能は、私がしたかった理由です
from multiprocessing import Process
def runParallel(fns=[], args=[]):
proc = []
for fn, arg in zip(fns, args):
p = Process(target=fn, args=(arg,))
p.start()
proc.append(p)
for p in proc:
p.join()
と呼ばれています私の理解から、いつでもプロセス量を処理できるので、プールを使用してください。
もし私が64ビットWindowsマシンで2.7.10でこれを実行すると便利です。
あなたは 'Process'と' fn' ==インスタンスメソッドで動作すると言っていますか? –
@PeterWoodはい、それは私がリストに約300のファイルがあるので、プログラムは20秒後に私のPCをクラッシュする300のプロセスを作成します。 – NoMonkey