我想知道是否有一种推荐的方法在pathos.multiprocessing.ProcessPool
中使用并行映射功能来处理涉及随机数生成的函数,即
def f(x):
return x*np.random.rand()
pool = pathos.multiprocessing.ProcessPool(nodes=4)
results = pool.map(f,np.linspace(0,1,11))
我怀疑我可以做一些简单的事情,比如在f
函数中添加np.random.seed()
,但理想情况下,我会喜欢一些可重复性。有没有办法只为池中的每个工作线程分配一个不同的已知种子,然后执行映射?
NumPy 文档包括一个示例,说明如何使用多个进程来减少生成随机数的时间。
多线程生成。
本质上,您为每个进程分配一个不同的 PRNG,基于公共种子进行初始化,将数组划分为块,将每个块分配给一个进程,并让每个进程用随机数填充其分配的块。 该示例(在撰写本文时(使用 PCG 并将 PRNG 向前跳转,为每个过程形成不同的数字流。 (有关 NumPy 中支持随机数流的不同方式,请参阅"并行随机数生成"。 另请参阅我的"播种多个进程"部分。