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