Python -- 如何在进程间共享Numpy数组?

12 投票
3 回答
1766 浏览
提问于 2025-04-16 20:50

我想在一个多核的Linux服务器上使用pythonmultiprocessing模块。

我需要所有的进程都能读写同一块共享内存。

我想知道,除了使用list或者queue,能不能把一个多维的numpy数组作为共享对象呢?

3 个回答

1

我发现即使在创建了一堆子进程之后,没有对你的numpy数组进行任何修改,内存使用量还是会飙升。这是因为子进程在某种情况下会对这个对象进行“写时复制”。

你可以通过在调用

"yourArray.flags.writeable = False"

之前设置一些东西来限制(或者完全缓解?)这个问题,这样可以减少内存的使用,而且比其他方法简单多了 :)

9

我觉得我知道你在找什么:https://bitbucket.org/cleemesser/numpy-sharedmem/issue/3/casting-complex-ndarray-to-float-in

这个网页上有个简短的介绍:这是一个由Sturla Molden和G. Varoquaux开发的numpy共享内存模块,可以方便地在不同的进程之间共享NumPy数组的内存。最初是发在SciPy用户邮件列表上的。

我自己也是这样使用的。就是在不同的进程之间共享NumPy数组。对我来说效果非常好。

6

看看这个。虽然看起来不太简单,但其实是可以做到的。

补充:原来的链接失效了,我换了一个新的链接。

撰写回答