2016-03-04 90 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