我使用 multiprocessing.sharedctypes.Array() 分配共享内存来进行多处理。但是,当程序运行时,我观察到 kernel_task 占用了大量内存(如 9GB)并且交换内存正在增加。所以我想知道 python 会自动收集共享内存中分配的内存吗?
另外,我检查了 multiprocessing.heap 的代码,它确实有 malloc() 和 free()。但是在 sharedctype s.py 中,它只调用了 malloc()。
最佳答案
最后,我找到了解决方案。我使用 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()
我仍然不确定池不释放其资源的确切原因是什么,但这是解决方案。
关于python - python会使用multiprocessing.sharedctypes收集共享内存中分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873606/