使用 multiprocessing.pool() 遍历列表

Looping through a list using multiprocessing.pool()

我在 N 文件列表中调用具有大量内存开销的函数。内存开销大的原因有很多因素,不修改函数是无法解决的,不过我用multiprocessing模块解决了内存泄漏问题。通过为每个 N 文件创建一个子进程,然后调用 pool.close(),以最小的开销释放函数的内存。我在以下示例中实现了这一点:

def my_function(n):
    do_something(file=n)
    return 


if __name__ == '__main__':

    # Initialize pool
    for n in range(0,N,1):
        pool = mp.Pool(processes=1)
        results = pool.map(my_function,[n])
        pool.close()
        pool.join()

这正是我想要的:通过在 pool 中设置 processes=1N 个文件一次 运行 个文件。在每个 n 文件之后,我调用 pool.close(),它关闭进程并将内存释放回 OS。之前,我根本不用multiprocessing,只是一个for循环,内存会累积到我的系统崩溃。

我的问题是

  1. 这是实现它的正确方法吗?
  2. 有没有更好的实现方式?
  3. 有没有办法一次 运行 多个进程 (processes>1),并且在每次 n 之后仍然释放内存?

我刚刚了解 multiprocessing 模块。我在这里找到了很多 multiprocessing 个例子,但是 none 是针对这个问题的。我会很感激我能得到的任何帮助。

Is this the correct way to implement this?

"Correct"是本例中的一个值判断。 人们可以认为这是一个障碍或一个聪明的黑客。

Is there a better way to implement this?

是的。修复 my_function 使其不会泄漏内存。 如果 Python 函数泄漏了大量内存,很可能是您做错了什么。

Is there a way to run more than one process at a time (processes>1), and still have the memory released after each n?

是的。创建 Pool.

时使用 maxtasksperchild 参数