导致非随机数的多线程池

问题描述 投票:0回答:1

我之前问过Repeatedly run a function in parallel如何并行运行一个函数。我要运行的函数具有一个随机元素,其中绘制随机整数。

当我在该答案中使用代码时,它会在一个过程中(以及在运行之间,如果我添加一个外部循环以重复该过程)则返回重复的数字。例如,

import numpy as np
from multiprocessing.pool import Pool

def f(_):
    x = np.random.uniform()
    return x*x    

if __name__ == "__main__":
    processes = 3
    p = Pool(processes)
    print(p.map(f, range(6)))

返回

[0.8484870744666029, 0.8484870744666029, 0.04019012715175054, 0.04019012715175054, 0.7741414835156634, 0.7741414835156634]

另一次奔跑可能会给与>

[0.17390735240615365, 0.17390735240615365, 0.5188673758527017, 1.308159884267618e-08, 0.09140498447418667, 0.021537291489524404]

似乎正在使用一些内部种子-我如何生成类似于np.random.uniform(size=6)请返回的随机数?

我之前曾问过关于如何并行运行函数的问题,反复并行运行函数。我要运行的函数具有一个随机元素,其中绘制随机整数。当我...

python-3.x multithreading
1个回答
0
投票

Same output in different workers in multiprocessing表示种子需要包含在函数中。 Python multiprocessing pool.map for multiple arguments提供了一种将多个参数传递给Pool的方法-一个用于重复,一个用于种子列表。

© www.soinside.com 2019 - 2024. All rights reserved.