Python 为什么';随机和多处理玩得好吗?

Python 为什么';随机和多处理玩得好吗?,python,arrays,numpy,random,multiprocessing,Python,Arrays,Numpy,Random,Multiprocessing,我有一个随机游走函数,它使用numpy.random执行随机步骤。 功能walk本身工作正常。同时,它在大多数情况下都能按预期工作,但与多处理结合使用时,它会失败。 为什么多处理会出错 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.whe

我有一个随机游走函数,它使用
numpy.random
执行随机步骤。 功能
walk
本身工作正常。同时,它在大多数情况下都能按预期工作,但与
多处理
结合使用时,它会失败。 为什么
多处理
会出错

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]
前两种方法显然具有随机性,而后一种方法则不具有随机性。 发生了什么事,
多处理
无法正确处理

如果您添加了一个
睡眠
,因此它是一个
梦游
,并且存在明显的延迟,
多处理
仍然会出错

但是,如果将对
np.random.uniform
的调用替换为像
[(random.random()-.5)for i in range(n)]
这样的非数组方法,那么它将按预期工作

那么为什么
numpy.random
多处理
不起作用呢

发生了什么,所以多重处理不能正确进行

您需要在每一个过程中确保伪随机流彼此独立


我使用来生成种子。

我猜numpy在每次初始化时都使用相同的值对其随机数生成器进行种子设定,因此所有子进程都位于随机性图上的同一点上,并将生成相同的随机数集。尝试调用
numpy.random.seed
,并在开始漫游时向其传递一些在非确定性漫游(如当前系统时间)调用之间会有所不同的值。可能吧,但我希望最后一行都是相同的……但事实并非如此。另请参见……有趣。似乎已经有人问过了。哦。@Aruistante:你基本上回答了我的问题…不是我该做什么,而是它为什么要做它正在做的事情…所以如果可以的话,我会给你检查。
np.random.seed(int.from_bytes(os.uradom(4),byteorder='little')
python3。