小编典典

在多处理中,不同工人的输出相同

python

我有非常简单的案例,可以将要完成的工作分解并分配给工人。我从这里尝试了一个非常简单的多处理示例:

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)。这是最好/最简单的方法吗?


阅读 153

收藏
2020-12-20

共1个答案

小编典典

我认为您需要在函数中使用numpy.random.seed重新设置随机数生成器do_calculation

我的猜测是,当您导入模块时,随机数生成器(RNG)会被植入种子。然后,当您使用多处理时,您将使用已播种的RNG来分叉当前进程-
因此,所有进程都为RNG共享相同的种子值,因此它们将生成相同的数字序列。

例如:

def do_calculation(data):
    np.random.seed()
    rand=np.random.randint(10)
    print data, rand
    return data * 2
2020-12-20