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

Python-为什么time.sleep会导致内存泄漏?,python,python-2.7,memory-leaks,multiprocessing,Python,Python 2.7,Memory Leaks,Multiprocessing,当我运行下面的代码时,内存正在增加。但是,如果我删除了time.sleep(3),则top中的0.1,并且从未增加 似乎进程没有正确终止,但为什么 代码(Python 2.7.11): 据我所知,我认为当您在同一个池中生成新进程时,垃圾收集永远不会完成,因此您不会从旧进程中释放内存,即使您已经使用过它们。 一种修复方法是在while循环中强制执行垃圾收集: import time import multiprocessing import gc def process(): time.

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

似乎
进程
没有正确终止,但为什么

代码(Python 2.7.11):


据我所知,我认为当您在同一个池中生成新进程时,垃圾收集永远不会完成,因此您不会从旧进程中释放内存,即使您已经使用过它们。 一种修复方法是在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()
这为我修复了内存泄漏问题,因为您在启动另一组进程之前强制垃圾收集。
我希望有人能更详细地解释这次内存泄漏的原因。

@vks官方文件说,
在使用join()之前必须调用close()或terminate()
下面的问题可能会让你感兴趣:检查用户1914881的答案:“尝试在池上设置MaxTasksParchild参数。如果不这样做,则池会一次又一次地重用该进程,这样就永远不会释放内存。设置后,进程将被允许死亡,并在其位置创建一个新进程。这将有效地清理内存。”这些进程似乎保留了一点内存,而这些内存在while 1循环中从未释放过。(虽然我不确定)@RobinSpiess我尝试了
maxstasksparchild
,但没有帮助。谢谢,这是一个帮助。
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()