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