Python - 为什么 time.sleep 会导致内存泄漏?

Python - why does time.sleep cause memory leak?

当我运行下面的代码时,内存在增加。但是,如果我删除了 time.sleep(3),它在 top 中是 0.1,并且从未增加。

似乎process没有被正确终止,但为什么?

代码(Python 2.7.11):

import time
import multiprocessing

def process():
    #: FIXME
    time.sleep(3)
    return

def main():
    pool = multiprocessing.Pool(processes=10)
    while 1:
        pool.apply_async(process)
    pool.close()
    pool.join()

if __name__ == '__main__':
    main()

据我所知,我认为当您在同一个池中生成新进程时,垃圾收集永远不会完成,因此您不会从旧进程中释放内存,即使您已经使用完它们。 一种解决方法是在您的 while 循环中强制执行垃圾回收:

import time
import multiprocessing
import gc

def process():
    time.sleep(3)
    return

def main():
    pool = multiprocessing.Pool(processes=10)
    while 1:
        pool.apply_async(process)
        gc.collect()
    pool.close()
    pool.join()


if __name__ == '__main__':
    main()

这为我解决了内存泄漏问题,因为您在启动另一组进程之前强制执行垃圾回收。 我希望有人能更详细地解释内存泄漏的原因。