我正在N
文件列表中调用一个内存开销很大的函数。内存开销大的原因是由于许多因素造成的,如果不修改函数,这些因素是无法解决的,但我已经使用multiprocessing
模块克服了内存泄漏的问题。通过为每个N
文件创建一个子进程,然后调用pool.close()
,可以以最小的开销释放函数中的内存。我在以下示例中实现了这一点:
def my_function(n):
do_something(file=n)
return
if __name__ == '__main__':
# Initialize pool
for n in range(0,N,1):
pool = mp.Pool(processes=1)
results = pool.map(my_function,[n])
pool.close()
pool.join()
这正是我想要的:通过在pool
中设置processes=1
,N
文件一次运行一个文件。在每个n
文件之后,我调用pool.close()
,它关闭进程并将内存释放回操作系统。以前,我根本不使用multiprocessing
,只是一个for
循环,内存会累积到我的系统崩溃。
我的问题是
- 这是实现此功能的正确方法吗
- 有没有更好的方法来实现这一点
- 是否有一种方法可以一次运行多个进程(
processes>1
(,并且在每次n
之后仍释放内存
我只是在学习multiprocessing
模块。我在这里找到了很多multiprocessing
的例子,但没有一个是针对这个问题的。如果能得到任何帮助,我将不胜感激。
这是实现这一点的正确方法吗?
在这种情况下,"正确"是一种价值判断。人们可以认为这是一个博德或聪明的黑客。
有更好的方法来实现这一点吗?
是。修复my_function
,使其不会泄漏内存。如果Python函数泄漏了大量内存,那么很可能您做错了什么。
是否有一种方法可以一次运行多个进程(进程>1(,并且在每个n之后仍然释放内存?
是。创建Pool
时,请使用maxtasksperchild
参数。