代码之家  ›  专栏  ›  技术社区  ›  Sandro

仅在多处理时使用高内存

  •  5
  • Sandro  · 技术社区  · 15 年前

    我正在尝试使用Python的多处理库来获得一些性能。特别是我正在使用它 map 功能。现在,由于某种原因,当我将它与它的单处理对应物交换时,我不会得到很高的内存使用率。但是使用多处理版本的map会使我的内存耗尽。事实上,我正在做一些很容易唤起记忆的事情,但是这两者之间有什么不同会导致如此明显的差异呢?

    1 回复  |  直到 12 年前
        1
  •  4
  •   Thomas Wouters    15 年前

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

    你发送了很多数据吗 multiprocessing map ?一个可能的原因是在许多情况下串行化多处理必须进行。 多处理 使用 pickle 它占用的内存通常比它保存的数据还要多。(在某些情况下,特别是在 fork() 当您调用 地图 方法,它可以避免序列化,但每当需要向现有进程发送新数据时,它就不能这样做。)

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