python会使用multiprocessing.sharedctypes收集共享内存中分配的内存吗?

时间:2014-11-11 20:09:00

标签: python garbage-collection multiprocessing

我使用multiprocessing.sharedctypes.Array()来分配共享内存来进行多处理。但是,当程序运行时,我发现kernel_task需要大量内存(如9GB)并且交换内存正在增加。所以我想知道python会自动收集共享内存中分配的内存吗?

另外,我检查了multiprocessing.heap的代码,它确实有malloc()和free()。但是在共享类型s.py中,它只调用malloc()。

1 个答案:

答案 0 :(得分:1)

最后,我找到了解决方案。我使用multiprocess.Pool.map在这样的函数中进行多处理:

def gemm():
    pool = multiprocess.Pool(processes=4)
    pool.map(some_fun,arg_list)

for i in xrange(10):
    gemm()

但是,我忘了在pool.map之后添加pool.close()和pool.join()。所以每次我打电话给gemm,都会花费一些记忆。即使引用计数为零,池也不会释放其资源。 正确的做法是添加pool.close()和pool.join():

def gemm():
    pool = multiprocess.Pool(processes=4)
    pool.map(some_fun,arg_list)
    pool.close()
    pool.join()

for i in xrange(10):
    gemm()

我仍然不确定为什么池不会释放其资源的确切原因,但这是解决方案。

相关问题