相关疑难解决方法(0)

在多处理过程之间共享大型只读Numpy数组

我有一个60GB的SciPy数组(矩阵)我必须在5个以上的multiprocessing Process对象之间共享.我已经看过numpy-sharedmem并在SciPy列表上阅读了这个讨论.似乎有是两个approaches-- numpy-sharedmem和使用multiprocessing.RawArray(),并映射NumPy的dtypes到ctype秒.现在,numpy-sharedmem似乎是要走的路,但我还没有看到一个很好的参考例子.我不需要任何类型的锁,因为数组(实际上是矩阵)将是只读的.现在,由于它的大小,我想避免副本.这听起来像是正确的方法是创建唯一的数组作为副本sharedmem数组,然后将它传递给Process对象?几个具体问题:

  1. 将sharedmem句柄实际传递给子的最佳方法是Process()什么?我是否需要一个队列来传递一个阵列?管道会更好吗?我可以将它作为参数传递给Process()子类的init(我假设它被腌制)吗?

  2. 在上面我讨论过的讨论中,有人提到numpy-sharedmem不是64位安全吗?我肯定使用一些不是32位可寻址的结构.

  3. 这种RawArray()方法是否存在权衡?更慢,更笨?

  4. 我是否需要numpy-sharedmem方法的任何ctype-to-dtype映射?

  5. 有没有人有一些OpenSource代码这样做的例子?我是一个非常亲力实践的人,如果没有任何好的例子,很难让它工作.

如果我可以提供任何其他信息以帮助其他人澄清这一点,请发表评论,我将添加.谢谢!

这需要在Ubuntu Linux和Maybe Mac OS上运行,但可移植性不是一个大问题.

python numpy shared-memory multiprocessing

79
推荐指数
4
解决办法
2万
查看次数

python进程可以共享活动对象吗?

我有一个多进程python应用程序(进程由uwsgi生成),需要在RAM中存储变量,然后从几个不同的进程读取和更新这些变量.我知道有很多可用的缓存选项,但我发现的所有选项都只能存储字符串.是否有可能不同的python进程访问相同的虚拟内存,从而共享数据而无需转换它甚至复制它?

python caching shared-memory

7
推荐指数
1
解决办法
2045
查看次数

标签 统计

python ×2

shared-memory ×2

caching ×1

multiprocessing ×1

numpy ×1