如何在多进程中共享大对象?

时间:2016-02-23 16:54:47

标签: python numpy pickle python-multiprocessing

我想在python中进行大量计算。 我想使用多进程来做到这一点。 问题是我必须将大型obj(例如大numpy和list,或numpy列表)从主进程传输到主进程创建的进程

问题在于: 1.如果我使用像results[i] = pool.apply_async(func, args_tuple)那样它会尝试腌制args_tuple,这需要花费大量时间 2.我自己的班级和numpy班不受支持 3.所有对象都是在主进程中准备好的,如果我在生成的进程中得到它,也会花费时间。

我怎么能解决这个问题..也许我应该使用java,如果我预测到这一点,我在文档中查找它,但似乎每个解决方案都是相同的 - 从主流程到其他人腌制params(费用时间)

1 个答案:

答案 0 :(得分:0)

据我所知,流程之间的每种沟通方式都使用pickle来传输数据(PipesQueue和其他人...)

使您的问题工作的一种方法可能是处理共享变量,但是您无法同时处理具有倍数进程的同一对象,因此它取决于您的应用程序。 它们是多处理中的一些简单实现的共享变量:ArrayValue,它们分别是一维数组和单个值(int,float,str ...)。 See the documentation here.

但是,如果需要,您还可以使用ctype创建自己的类型:see the documentation here.