numpy 数组不适用于 Python 多处理



我正在尝试在一个简单的for循环中修改一个简单的数组。因为对于使用单个线程的应用程序来说似乎是一个瓶颈,所以我决定看看python的多处理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].知道为什么吗?任何想法如何解决这个问题?

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

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

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

def func(x):
return = 1

然后

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

会做你想做的事。

相关内容

  • 没有找到相关文章