【发布时间】:2018-01-31 05:44:32
【问题描述】:
我正在尝试在一个简单的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]。任何想法为什么?有什么想法可以解决这个问题吗?
【问题讨论】:
-
工作进程无权访问主进程的对象。最多,他们得到副本,有时甚至没有。您正在对副本进行操作。
-
@user2357112 这是否意味着他们有不同的ID?因为id是一样的。
-
ID 仅在进程中有意义。不同进程中的对象可能具有相同的ID。
-
跨进程共享对象非常重要。但是,如果您只需要一个原始数组,您可以使用docs.python.org/3.6/library/…
-
我实际上需要一个二维阵列。谢谢@juanpa.arrivillaga,我会调查的。
标签: python numpy multiprocessing python-multiprocessing