如何在多处理过程中在每个子进程中生成不同的随机值?

How to generate different random values at each subprocess during a multiprocessing?

我需要在每个子进程中生成不同的随机值,但我意识到这个局部变量在每个子进程之间被重写或共享。请参阅下面的示例以了解我面临的问题:

import numpy as np
from multiprocessing import Pool

def func(i):
    i2 = i**2
    random_variable = np.round(np.random.normal(), 3)
    return i2, random_variable

if __name__ == '__main__':
    with Pool() as pool:
        result = pool.map(func, [1, 2, 3, 4, 5])
        print(result)

输出:

[(1, -0.122), (4, -0.122), (9, -0.122), (16, -0.122), (25, -0.122)]

出现此输出的原因可能是什么?以及如何在每个子流程中生成不同的随机变量?

由于对 func() 的每次调用都在其自己的进程中,因此它需要为 random 函数提供自己的种子:

def func(i):
    np.random.seed(i)
    i2 = i**2
    random_variable = np.round(np.random.normal(), 3)
    return i2, random_variable