numpy数组不适用于python多处理

时间:2017-08-22 20:03:06

标签: python numpy multiprocessing python-multiprocessing

我试图在简单的for循环中修改一个简单的数组。因为我的应用程序使用单个线程似乎是一个瓶颈,我决定看看pythons多处理API。但是,我似乎无法同时修改numpy数组,即使我只修改每个元素一次。看看这个示例代码:

将numpy导入为np     导入多处理

arrlen = 3
arr = np.zeros(arrlen)


def func(x):
    arr[x] = 1


for i in range(arrlen):
    func(i)

print(arr)

这一切都很好,花花公子,我得到[1.0, 1.0, 1.0]就像预期一样。但是,只要我用pool.map替换for循环,它就无法正常工作。

pool = multiprocessing.Pool()
pool.map(func, range(arrlen))

我用PyCharm调试器检查过,func实际上是用正确的参数调用的,但是第二个例子打印[0.0, 0.0, 0.0]。有什么想法吗?我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

使用多处理时,您生成的每个线程都会在其自己的范围内接收进程对象。

您的函数需要返回一个值,然后您需要将它们聚合到您的全局数组中。

生成的线程无法访问全局数组。 所以

def func(x):
    return = 1

然后

arr = np.array(pool.map(func, range(arrlen)))

会做你想做的事。