我有一个 60GB 的 SciPy 数组(矩阵),我必须在 5 个以上的multiprocessing
Process
对象之间共享。我看过 numpy-sharedmem 并在 SciPy 列表上阅读了这个讨论。似乎有两种方法numpy-sharedmem
——使用 amultiprocessing.RawArray()
并将 NumPy dtype
s 映射到ctype
s。现在,numpy-sharedmem
似乎是要走的路,但我还没有看到一个好的参考示例。我不需要任何类型的锁,因为数组(实际上是矩阵)将是只读的。现在,由于它的大小,我想避免复制。听起来正确的方法是将数组的唯一副本创建为数组,sharedmem
然后将其传递给Process
对象?几个具体问题:
将sharedmem 句柄实际传递给sub-
Process()
es 的最佳方式是什么?我需要一个队列来传递一个数组吗?管道会更好吗?我可以将它作为参数传递给Process()
子类的 init(我假设它是腌制的)吗?在我上面链接的讨论中,提到
numpy-sharedmem
不是 64 位安全的?我肯定使用了一些不可 32 位寻址的结构。这种方法有权衡
RawArray()
吗?更慢,更麻烦?numpy-sharedmem 方法是否需要任何 ctype-to-dtype 映射?
有没有人有这样做的一些开源代码的例子?我是一个非常动手学习的人,如果没有任何好的例子可以看,很难让它发挥作用。
如果我可以提供任何其他信息来帮助其他人澄清这一点,请发表评论,我会添加。谢谢!
这需要在 Ubuntu Linux 和Maybe Mac OS 上运行,但可移植性并不是一个大问题。