我正在尝试使用python的多处理库来希望获得一些性能.具体来说,我正在使用其map功能.现在,出于某种原因,当我将其与单个处理的对应物交换出来时,我没有获得高内存使用率.但是使用多处理版本的地图会让我的记忆彻底改变.为了记录我正在做一些容易占用大量内存的东西,但两者之间的区别是什么会造成如此明显的差异呢?
最佳答案
您意识到多处理不使用线程,是吗?我这样说是因为你提到了“单线程对手”.
原文链接:https://www.f2er.com/python/439025.html您是通过多处理的地图发送大量数据吗?可能的原因是序列化多处理在许多情况下必须要做.多处理使用pickle,它通常比它的酸洗数据占用更多的内存. (在某些情况下,特别是在使用fork()的系统上,当您调用map方法时会创建新进程,它可以避免序列化,但只要需要将新数据发送到现有进程,它就不能这样做.)
由于使用多处理,所有实际工作都在单独的进程中完成,因此主进程的内存不应受您执行的实际操作的影响.但是,内存的总使用量确实会增加很多,因为每个工作进程都有您发送的数据的副本.在有CoW的系统上,这有时是写时复制内存(在非串行化的情况下),但是Python对内存的使用很快就会被写入,从而被复制.