我有非常简单的案例,可以将要完成的工作分解并分配给工人。我从这里尝试了一个非常简单的多处理示例:
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)。这是最好/最简单的方法吗?
我认为您需要在函数中使用numpy.random.seed重新设置随机数生成器do_calculation。
do_calculation
我的猜测是,当您导入模块时,随机数生成器(RNG)会被植入种子。然后,当您使用多处理时,您将使用已播种的RNG来分叉当前进程- 因此,所有进程都为RNG共享相同的种子值,因此它们将生成相同的数字序列。
例如:
def do_calculation(data): np.random.seed() rand=np.random.randint(10) print data, rand return data * 2