仅在多处理时使用高内存

时间:2010-04-24 20:13:48

标签: python multiprocessing

我正在尝试使用python的多处理库来希望获得一些性能。具体来说,我正在使用其map功能。现在,出于某种原因,当我将其与单个处理的对应物交换出来时,我没有获得高内存使用率。但是使用多处理版本的地图会让我的记忆彻底改变。为了记录,我正在做一些容易占用大量内存的东西,但两者之间的区别是什么会造成如此明显的差异呢?

1 个答案:

答案 0 :(得分:4)

你意识到多处理不使用线程,是吗?我这样说是因为你提到了“单线程对手”。

您是否通过multiprocessing map发送了大量数据?可能的原因是序列化多处理在许多情况下必须要做。 multiprocessing使用pickle,它通常占用的内存比它正在腌制的数据多。 (在某些情况下,特别是在调用fork()方法时创建新进程的map的系统上,它可以避免序列化,但只要需要将新数据发送到现有进程,它就无法执行如此。)

由于multiprocessing所有实际工作都是在不同的进程中完成的,因此主进程的内存不应受您执行的实际操作的影响。但是,内存的总使用量确实会增加很多,因为每个工作进程都有您发送的数据的副本。在有CoW的系统上,这有时是写时复制存储器(在非串行化的情况下),但Python对存储器的使用很快就会被写入并因此被复制。