Python:子进程内存泄漏
我想同时在多个核上运行一个串行程序,我需要多次运行(在一个循环中)。 我使用subprocess.Popen将作业数量限制为可用处理器的数量,从而在处理器上分配作业。我将作业添加到列表中,然后使用poll()检查作业是否完成,然后从列表中删除它们并继续提交,直到完成作业总数 我一直在网上寻找,找到了几个有趣的脚本来实现这一点,并推出了我的改编版本:Python:子进程内存泄漏,python,memory-leaks,parallel-processing,subprocess,cluster-computing,Python,Memory Leaks,Parallel Processing,Subprocess,Cluster Computing,我想同时在多个核上运行一个串行程序,我需要多次运行(在一个循环中)。 我使用subprocess.Popen将作业数量限制为可用处理器的数量,从而在处理器上分配作业。我将作业添加到列表中,然后使用poll()检查作业是否完成,然后从列表中删除它们并继续提交,直到完成作业总数 我一直在网上寻找,找到了几个有趣的脚本来实现这一点,并推出了我的改编版本: nextProc = 0 processes = [] while (len(processes) < limitProc): # H
nextProc = 0
processes = []
while (len(processes) < limitProc): # Here I assume that limitProc < ncores
input = filelist[nextProc]+'.in' # filelist: list of input file
output = filelist[nextProc]+'.out' # list of output file
cwd = pathlist[nextProc] # list of paths
processes.append(subprocess.Popen(['myProgram','-i',input,'-screen',output],cwd=cwd,bufsize=-1))
nextProc += 1
time.sleep(wait)
while (len(processes) > 0): # Loop until all processes are done
time.sleep(wait)
for i in xrange(len(processes)-1, -1, -1): # Remove processes done (traverse backward)
if processes[i].poll() is not None:
del processes[i]
time.sleep(wait)
while (len(processes) < limitProc) and (nextProc < maxProcesses): # Submit new processes
output = filelist[nextProc]+'.out'
input = filelist[nextProc]+'.in'
cwd = pathlist[nextProc]
processes.append(subprocess.Popen(['myProgram','-i',input,'-screen',output],cwd=cwd,bufsize=-1))
nextProc += 1
time.sleep(wait)
print 'Jobs Done'
nextProc=0
进程=[]
while(len(processs)0):#循环直到所有进程都完成
时间。睡眠(等待)
对于xrange中的i(len(进程)-1,-1,-1):#删除已完成的进程(向后遍历)
如果进程[i].poll()不是无:
del进程[i]
时间。睡眠(等待)
而(len(流程)
我在循环中运行这个脚本,问题是执行时间从一个步骤增加到另一个步骤。以下是图表:
我的程序执行时间是恒定的。
如果有人能向我解释是什么导致了这次泄漏,我会非常高兴
非常感谢,
Begbi考虑使用
多处理.Pool
。它为每个CPU设置一个进程,运行作业,并在旧作业完成时启动新作业。我尝试了多重处理,但也遇到了类似的问题。我更希望了解泄漏的原因,而不是其他解决方案。