我想在python中进行大量计算。 我想使用多进程来做到这一点。 问题是我必须将大型obj(例如大numpy和list,或numpy列表)从主进程传输到主进程创建的进程
问题在于:
1.如果我使用像results[i] = pool.apply_async(func, args_tuple)
那样它会尝试腌制args_tuple,这需要花费大量时间
2.我自己的班级和numpy班不受支持
3.所有对象都是在主进程中准备好的,如果我在生成的进程中得到它,也会花费时间。
我怎么能解决这个问题..也许我应该使用java,如果我预测到这一点,我在文档中查找它,但似乎每个解决方案都是相同的 - 从主流程到其他人腌制params(费用时间)
答案 0 :(得分:0)
据我所知,流程之间的每种沟通方式都使用pickle来传输数据(Pipes
,Queue
和其他人...)
使您的问题工作的一种方法可能是处理共享变量,但是您无法同时处理具有倍数进程的同一对象,因此它取决于您的应用程序。
它们是多处理中的一些简单实现的共享变量:Array
和Value
,它们分别是一维数组和单个值(int,float,str ...)。 See the documentation here.
但是,如果需要,您还可以使用ctype
创建自己的类型:see the documentation here.