numpy.random的并行处理创建相同的数字

时间:2018-01-25 10:22:18

标签: python numpy parallel-processing

我想知道为什么我的程序不会创建不同的随机数,如果我使用PipeProcess来创建它们并行。我的代码

import numpy as np
from multiprocessing import Process, Pipe

def createNumbers(conn):
    result = np.random.randint(0,2, size=(4))
    conn.send(result)

parent_conn, child_conn = Pipe()
for i in range(3):
    process = Process(target=createNumbers, args=(child_conn,))
    process.start()
    process.join()
    result = parent_conn.recv()

    print(result)

创建三个相同的向量

  

(0,1,1,1)
  (0,1,1,1)
  (0,1,1,1)

如果我使用ThreadPool代替它,它可以正常工作。代码

from multiprocessing.pool import ThreadPool
import numpy as np

def createNumbers():
    return np.random.randint(0,2, size=4)

for i in range(3):
    pool = ThreadPool(processes=1)
    process = pool.apply_async(createNumbers)
    result = process.get()
    print(result)

创建最多三个相同的向量

  

(1,0,1,0)
  (0,0,1,0)
  (1,0,0,0)

有人知道为什么PipeProcess的程序会创建相同的数字吗?

0 个答案:

没有答案