具有多处理功能的可预测伪随机列表

时间:2018-03-26 13:40:06

标签: python random multiprocessing seed

我有一个脚本,它使用多处理来创建一个伪随机数列表。简化如下:

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]

相同的数字总是重复,因为池中有工人。

有没有办法让我以这样的方式播种随机性,这种方式总会给我相同的列表,但是看似随机的列表,无论工人数量多少?

0 个答案:

没有答案