当我运行下面的代码时,内存不断增加。但是,如果我删除了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()
答案 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()
这为我修复了内存泄漏,因为在启动另一组进程之前强制执行垃圾回收。 我希望有人可以更详细地解释这个内存泄漏的原因。