为什么每个进程都会多次创建相同的对象?

时间:2019-02-08 16:57:34

标签: python multiprocessing

我试图同时生成2个不同的全息图,因此尝试使用多重处理来节省时间。每次调用“ BinaryPhase”对象时,都应生成不同的全息图。

但是,当我这样做时,应该包含两个不同全息图的数组却包含了两个相同的全息图。

我已经看到了许多使用多处理程序来在线写入数组的实现方式,但我看不出为什么我要这么做。

我也很确定这将专门与BinaryPhase对象的初始化函数的调用有关,因为如果我在'getHologram'函数中添加一行以打印随机数,则每个数字都不相同处理。

但是,我不明白为什么random.uniform(0,1)在每个进程中执行的方式不同(正如您期望的那样),但是BinaryPhase(...)不会。

编辑:我还应该补充一点,将Process更改为Thread的相同代码可以工作,尽管显然慢得多。我模糊地知道线程共享内存,而进程不共享内存,但是无法想到为什么这会导致在不同的进程中生成同一对象。如果有人熟悉这些内容,那么进行解释将非常有用!

def getHologram(image, depth, distance):
    newHologram = BinaryPhase(image,depth,distance)
    holograms.append(newHologram)

if __name__ == '__main__':

    holograms = Manager().list()
    processes = []

    for i in range(2):
            p = Process(target=getHologram, args=('./images/topRightSquare.bmp',1,1,))
            p.start()
            processes.append(p)

    for p in processes:
            p.join()

    holograms = list(holograms)

0 个答案:

没有答案