我想在同一时间在多个核心上运行一个串行程序,我需要多次执行(在一个循环中)。
我使用子流程.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'
我在一个循环中运行这个脚本,问题是执行时间从一个步骤增加到另一个步骤。这是图表:http://i62.tinypic.com/2lk8f41.png
myProgram时间执行是恒定的。
如果有人能解释一下是什么导致了这次泄密,我会很高兴的。在
非常感谢,
贝格比