私は以下のコードを実行しており、正常に動作していますが、別のプロセスに生成されていません. そして、私は4つのCPUマシンを使用しています。このコードの何が問題になっていますか?
def f(values):
print(multiprocessing.current_process())
return values
def main():
p = Pool(4) #number of processes = number of CPUs
keys, values= zip(*data.items()) #ordered keys and values
processed_values= p.map( f, values )
result= dict( zip(keys, processed_values ) )
p.close() # no more tasks
p.join() # wrap up current tasks
そして結果は
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
また、時にはこんな風に、
<SpawnProcess(SpawnPoolWorker-3, started daemon)>
<SpawnProcess(SpawnPoolWorker-2, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-3, started daemon)>
時々、
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-4, started daemon)>
<SpawnProcess(SpawnPoolWorker-2, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
そして私の質問は、どのような基準で機能をワーカーに割り当てるのですか? ディクショナリ内のキーの数に基づいてプロセスの数を決定する方法でコードを記述しています (データのキーは常に CPU よりも少ないことを考慮して)。私のコードは次のように始まります-メインコードはファイルを読み取り、単一のプロセスを使用して辞書を作成し、それを複数の同時プロセスに分岐し、それらがデータを処理するのを待つ必要があります(私はそのためにpool.mapを使用しています)、次に子プロセスの結果を取得すると、それらの処理を開始します。この親が子プロセスステップを待機するようにするにはどうすればよいですか?