仅在多进程时内存使用高
我正在尝试使用Python的多进程库,希望能提高一些性能。具体来说,我在使用它的map函数。现在,奇怪的是,当我把它换成单进程的版本时,内存使用量并没有很高。但是使用多进程版本的map时,我的内存使用量却飙升。需要说明的是,我正在做的事情很容易占用大量内存,但这两者之间有什么区别,导致内存使用量差别这么大呢?
1 个回答
4
你知道多进程并不是使用线程吧?我这么说是因为你提到了“单线程的对应版本”。
你是不是通过 multiprocessing
的 map
发送了很多数据?一个可能的原因是多进程在很多情况下需要进行序列化。multiprocessing
使用 pickle
,这通常会占用比原始数据更多的内存。(在某些情况下,特别是在使用 fork()
的系统上,当你调用 map
方法时会创建新进程,这时可以避免序列化,但每当需要将新数据发送到现有进程时,就不能避免了。)
因为在 multiprocessing
中,所有实际的工作都是在不同的进程中完成的,所以你主进程的内存不应该受到你实际操作的影响。不过,总的内存使用量会增加很多,因为每个工作进程都有你发送的数据的一个副本。在某些情况下(比如没有序列化的情况),在支持写时复制(CoW)的系统上,这有时是写时复制的内存,但Python的内存使用方式使得这很快就会被写入,从而变成了复制。