我有一个脚本,它使用多处理来创建一个伪随机数列表。简化如下:
import os, multiprocessing
import numpy as np
def generate_random_number(i):
np.random.seed()
return np.random.uniform(0, 100)
pool = multiprocessing.Pool(os.cpu_count() - 1)
rand_list = pool.map(generate_random_number, range(10))
print(rand_list)
输出看起来像那样:
[77.57457867285069, 72.53197844139046, 13.197630136723138, 64.9476430895216, 61.91057931216751, 43.436320344539446, 0.16208332066368625, 11.226294184830632, 20.325312826899765, 28.020558284894005]
为了进行回归测试,我希望能够以一种仍然给我伪随机数的方式播种随机性,但每次都是相同的数字。我尝试了以下方法:
def generate_random_number(i):
return np.random.uniform(0, 100)
np.random.seed(123)
pool = multiprocessing.Pool(os.cpu_count() - 1)
rand_list = pool.map(generate_random_number, range(10))
print(rand_list)
然后所有工人都从相同的种子开始,所以我得到:
[69.64691855978616, 69.64691855978616, 69.64691855978616, 69.64691855978616, 69.64691855978616, 69.64691855978616, 28.613933495037948, 28.613933495037948, 28.613933495037948, 28.613933495037948]
相同的数字总是重复,因为池中有工人。
有没有办法让我以这样的方式播种随机性,这种方式总会给我相同的列表,但是看似随机的列表,无论工人数量多少?