我试图同时生成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)