2015-09-26 22 views
0

我有兩個不同的可執行文件(run1run2)。我想同時運行它們。它們共享一個只讀輸入文件,但是,它們是不同的過程。 是否可以同時撥打call? 目前,由於我已經編碼,cmd2的呼叫等待cmd1的呼叫完成。分別運行2個或多個子進程調用

with open(dosout, "w") as dout, open(jijout, "w") as jout: 
    cmd1 = ["mpirun", "-np", "8", "~/WORK/run1", dosinp] 
    cmd2 = ["mpirun", "-np", "8", "~/WORK/run2", jijinp] 
    call(cmd1, stdout=dout) 
    call(cmd2, stdout=jout) 
dout.close() 
jout.close() 

這可能與call?或Popenthis答案是唯一(或更好)的出路?

+0

調用等待進程返回,Popen不是這樣,你可以使用Popen –

+0

http://stackoverflow.com/questions/16071866/non-blocking-subprocess-call –

+0

相關:[Python線程多個bash子進程? ](http://stackoverflow.com/q/14533458/4279) – jfs

回答

1

您需要使用Popen(如您所鏈接的答案中所述)(還有其他一些地方,因爲Popen是一個經常需要的稍低級別的界面)。

0

要同時運行兩個子過程:

from subprocess import Popen 

# start processes 
with open(dosout, "wb", 0) as dout, open(jijout, "wb", 0) as jout: 
    processes = [Popen(["mpirun", "-np", "8", "...WORK/run1", cmd], stdout=file) 
       for cmd, file in [(dosinp, dout), (jijinp, jout)]] 

# wait for them to finish 
statuses = [p.wait() for p in processes] 

注:文件是從with語句來退出關閉,沒有手動調用.close()