为什么 numpy.random 和 multiprocessing 不能很好地发挥作用? [复制]

2023-11-24

我有一个随机游走函数,它使用numpy.random执行随机步骤。 功能walk本身就可以正常工作。同时,它在大多数情况下按预期工作,但是与multiprocessing, 它失败。 为什么multiprocessing听错了吗?

import numpy as np

def walk(x, n=100, box=.5, delta=.2):
    "perform a random walk"
    w = np.cumsum(x + np.random.uniform(-delta,delta,n))
    w = np.where(abs(w) > box)[0]
    return w[0] if len(w) else n

N = 10

# run N trials, all starting from x=0
pwalk = np.vectorize(walk)
print pwalk(np.zeros(N))

# run again, using list comprehension instead of ufunc
print [walk(0) for i in range(N)]

# run again, using multiprocessing's map
import multiprocessing as mp
p = mp.Pool()
print p.map(walk, [0]*N)

结果通常类似于......

[47 16 72  8 15  4 38 52 12 41]
[7, 45, 25, 13, 16, 19, 12, 30, 23, 4]
[3, 3, 3, 3, 3, 3, 3, 14, 3, 14]

前两种方法明显表现出随机性,而后者则没有。 这是怎么回事,所以multiprocessing没听懂吗?

如果您添加一个sleep所以这是一个sleepwalk并且有明显的延迟,multiprocessing还是搞错了。

但是,如果您将调用替换为np.random.uniform使用非数组方法,例如[(random.random()-.5) for i in range(n)],然后它就会按预期工作。

那么为什么不呢numpy.random and multiprocessing玩得好吗?


发生了什么事,多重处理无法正常进行?

你需要reseed在每个过程中,以确保伪随机流彼此独立。

I use 乌兰多姆操作系统来生成种子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 numpy.random 和 multiprocessing 不能很好地发挥作用? [复制] 的相关文章

随机推荐