実行する作業を分割してワーカー間で分散できる非常に単純なケースがあります。ここから非常に単純なマルチプロセッシングの例を試しました:
import multiprocessing
import numpy as np
import time
def do_calculation(data):
rand=np.random.randint(10)
print data, rand
time.sleep(rand)
return data * 2
if __name__ == '__main__':
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size)
inputs = list(range(10))
print 'Input :', inputs
pool_outputs = pool.map(do_calculation, inputs)
print 'Pool :', pool_outputs
上記のプログラムは、次の出力を生成します。
Input : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 7
1 7
2 7
5 7
3 7
4 7
6 7
7 7
8 6
9 6
Pool : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
同じ乱数が出力されるのはなぜですか? (私のマシンには 4 つの CPU があります)。これは先に進むための最良/最も簡単な方法ですか?