如何在多处理过程中在每个子进程中生成不同的随机值?
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
我需要在每个子进程中生成不同的随机值,但我意识到这个局部变量在每个子进程之间被重写或共享。请参阅下面的示例以了解我面临的问题:
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