使用共享numpy数组的Python多处理
假设我创建了一个具有二维numpy数组作为属性的对象A。然后,我使用ProcessAPI创建了10个线程来随机设置A的行 我想知道我是否编写了以下代码,self.x是否在所有进程(线程)之间共享,或者每个进程(线程)都只有一个副本 如果不共享,我将丢失所有更新,对吗使用共享numpy数组的Python多处理,python,arrays,multithreading,numpy,Python,Arrays,Multithreading,Numpy,假设我创建了一个具有二维numpy数组作为属性的对象A。然后,我使用ProcessAPI创建了10个线程来随机设置A的行 我想知道我是否编写了以下代码,self.x是否在所有进程(线程)之间共享,或者每个进程(线程)都只有一个副本 如果不共享,我将丢失所有更新,对吗 import numpy as np from multiprocessing import Process class A: def __init__(): self.x = np.zeros((3,4))
import numpy as np
from multiprocessing import Process
class A:
def __init__():
self.x = np.zeros((3,4))
def update():
threads = []
for i in range(10):
trd = Process(target=self.set, args=(i,))
threads.append(trd)
trd.start()
for i in range(10):
threads[i].join()
def set(i):
self.x[i/3] = np.random.rand(1,4)
if ___main___:
a = A()
a.update()
不,它不是共享的。生成多个进程,每个进程复制父进程的文件描述符,并且没有共享对象 要创建共享变量,请使用对象 因此,与其将数组声明为-
self.x = np.zeros((3,4))
您可以使用此-
如果仍然希望使numpy数组成为一个共享数组,请看下面这个很棒的例子
这里的警告是,这可能没那么容易。您还必须锁定共享阵列以避免任何竞争条件
from multiprocessing import Array
self.x = Array('i', [0]*10)