2016-03-04 75 views
0

我有一个包含需要运行的文件列表的目录。这些都是很繁重的计算任务,所以我正在寻找在任务提交once.My第一功能运行多个文件,最好的办法是:立即通过python运行多个可执行文件

def copasiSE_batch_run(self): 
    os.chdir(self.IA_dir) #dir containing files 
    count=0 
    for i in glob.glob('*.cps'): 
     os.system('CopasiSE '+i) 
     count = count+1 
     print '\n\n\n {}:\tProfile liklihood for {} has been calcualted'.format(count,i) 

这无关紧要,它的工作原理,但只使用一个进程,等待直到一个文件完成运行,然后运行下一个。由于这些是独立的任务如果我能够同时进行更多的工作,这将是一件好事。我然后尝试:

def copasiSE_batch_run_subprocess(self): 
    os.chdir(self.IA_dir) 
    for i in glob.glob('*.cps'): 
     command='CopasiSE '+i 
     subprocess.Popen(command) 

这也适用,但给我相反的问题。我有32个需要运行的文件,这个功能似乎一次运行它们,这样我的电脑基本上无法使用,直到完成。在一次运行的程序数量之间找到一个好的平衡点,并且剩下足够的计算机能量来执行一些相当低密集度的任务,最好的方法是什么?

回答

1

导入时间并使用time.sleep(60)。如果将这个参数放在for循环中并在参数中保留合理的时间,则可以减少一次运行的进程数量,但仍然有多个进程一次运行。

+0

嗨乔纳森,谢谢你的回应。这是一个很好的解决方案,并且运行良好,但为了完整起见,您是否知道是否有办法限制正在运行的文件数量(例如)8,直到所有作业完成?欢呼声 – CiaranWelsh

+0

我可以给你一个想法,但我不知道如何用代码表达它。你将不得不使用循环或条件语句。 while command.running> = 8:暂停脚本 – Jonathan