5
当我运行下面的代码时,内存在增加。但是,如果我删除time.sleep(3)
,它是0.1
在top
并且从未增加。Python - 为什么time.sleep导致内存泄漏?
看来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()
@vks官方文档说'在使用join()'https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing之前,必须调用close()或terminate()。 Pool.join – tanglong
以下问题可能会对您有所帮助:http://stackoverflow.com/questions/7648967/python-multiprocessing-how-to-release-memory-when-a-process-is-done检查答案user1914881:“试着在池中设置maxtasksperchild参数,如果你不这样做,那么这个进程会被池重复使用,所以内存永远不会被释放,当设置时,进程将被允许死掉,一个新的一个在它的位置创建,这将有效地清理内存。“这些进程似乎保留了一点内存,这在1循环中从未释放。 (虽然我不确定) –
@RobinSpiess我试过'maxtasksperchild',但没有帮助 – tanglong