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

时间:2016-01-19 10:17:56

标签: python python-2.7 memory-leaks multiprocessing

当我运行下面的代码时,内存不断增加。但是,如果我删除了time.sleep(3)0.1中的top就永远不会增加。

似乎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()

1 个答案:

答案 0 :(得分:1)

据我所知,我认为当您在同一个池中生成新进程时,垃圾收集永远不会完成,因此即使您已经完成使用它们,也不会从旧进程中释放内存。 一个解决方法是在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()

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