Python 仅在进行多处理时内存使用率高

Python 仅在进行多处理时内存使用率高,python,multiprocessing,Python,Multiprocessing,我试图使用python的多处理库来获得一些性能。具体来说,我正在使用它的功能。现在,由于某种原因,当我把它和它的单一处理的对应物交换时,我并没有得到很高的内存使用率。但是使用多处理版本的map会使我的记忆崩溃。恕我直言,我正在做的事情很容易占用大量内存,但两者之间的差异会导致如此明显的差异吗?您知道多处理不使用线程,是吗?我这样说是因为你提到了“单线程对应物” 您是否通过多处理的映射发送大量数据?一个可能的原因是在许多情况下必须进行序列化多处理多处理使用pickle,这通常会占用比它所处理的数据

我试图使用python的多处理库来获得一些性能。具体来说,我正在使用它的功能。现在,由于某种原因,当我把它和它的单一处理的对应物交换时,我并没有得到很高的内存使用率。但是使用多处理版本的map会使我的记忆崩溃。恕我直言,我正在做的事情很容易占用大量内存,但两者之间的差异会导致如此明显的差异吗?

您知道多处理不使用线程,是吗?我这样说是因为你提到了“单线程对应物”

您是否通过
多处理
映射
发送大量数据?一个可能的原因是在许多情况下必须进行序列化多处理<代码>多处理使用
pickle
,这通常会占用比它所处理的数据更多的内存。(在某些情况下,特别是在具有
fork()
的系统上,当您调用
map
方法时会创建新进程,它可以避免序列化,但每当它需要向现有进程发送新数据时,它就不能这样做。)


由于使用
多处理
时,所有实际工作都是在单独的进程中完成的,因此主进程的内存不应受到您执行的实际操作的影响。然而,内存的总使用量确实增加了不少,因为每个工作进程都有一份您发送的数据副本。在有CoW的系统上,这有时是写时拷贝内存(与不序列化的情况相同),但Python对内存的使用使得它很快被写入,并因此被复制。

对,很抱歉,我知道多进程实际上不使用线程。(因此得名)所以通过管道发送信息是扼杀它的原因。这很有道理。你知道我面临的问题有什么解决方案吗?发送更少的数据。或者,把它分成小块发送过来。或者,如果您在使用fork()的系统上,请确保不会发生序列化:确保多处理将启动新进程。请注意,这听起来根本不像内存泄漏,就像内存使用一样。非常正确,再一次,我的措辞很糟糕。