Python:子进程内存泄漏

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

我想同时在多个核上运行一个串行程序,我需要多次运行(在一个循环中)。 我使用subprocess.Popen将作业数量限制为可用处理器的数量,从而在处理器上分配作业。我将作业添加到列表中,然后使用poll()检查作业是否完成,然后从列表中删除它们并继续提交,直到完成作业总数

我一直在网上寻找,找到了几个有趣的脚本来实现这一点,并推出了我的改编版本:

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设置一个进程,运行作业,并在旧作业完成时启动新作业。我尝试了多重处理,但也遇到了类似的问题。我更希望了解泄漏的原因,而不是其他解决方案。