2013-11-02 101 views
0

有5個進程由subprocess.Popen(someexternalCommand)創建和運行。命令順序啓動很重要,例如,第二個過程在第一個過程開始並運行之前不能啓動。 下面的代碼被用於:強制Popen進程在python中以某種順序執行

proc1 = TrafficGenUtils.Popen(someexternalCommand) 
time.sleep(10) 
proc2 = TrafficGenUtils.Popen(someexternalCommand) 
time.sleep(10) 
... 

執行順序保持時的進程數爲3,但與5它幾乎從來沒有保持和增加睡眠,甚至60秒於事無補。 如何強制執行Popen進程是連續的。 我的代碼無法正常工作的原因與Popen依賴OS創建進程的事實相關,但操作系統在需要時啓動它們?我正在使用Windows 8和Python 2.7

+0

*你知道什麼時候一個進程「已經開始運行」?然後你需要編寫代碼來教你的程序尋找相同的東西。如果你控制你開始的進程的代碼,這可以更容易一些(例如,一個進程可以創建一個新文件,當你準備好時,你的主程序可以等待這個新文件出現)。順便說一句,'sleep()'幾乎不是解決進程間(甚至是線程間)通信問題的適當方法。 –

+0

謝謝。但我不能控制主程序啓動的過程。進程是exe文件。 – user1264304

+1

所以我再問一次:你怎麼知道一個進程「已經開始並且正在運行?」。這裏沒有魔法。你知道或者你不知道。如果你不知道,這個問題是無法解決的。如果你知道,那麼你必須教你的程序如何知道。 –

回答

0

Popen開始一個新的進程,因此從那一刻起,它就可以由操作系統來安排它的運行時間。你不僅可以假設一個進程將在另一個進程之前運行,而且你甚至不能假定你的父進程將執行給孩子,實際上可能不會。

爲了創建順序執行,您可以使用proc1.wait()停止父進程,直到子進程完成其執行。通過這種方式,您可以保證這些進程將按順序運行,因爲父進程不會繼續,直到子進程結束並因此不會產生其他子進程。

瞭解更多Python Documentation

+0

謝謝。但是,我的問題是,我不希望第一個子進程結束,然後第二個啓動,但第一個開始,第二個開始等等。子進程將在後臺運行,直到我對它們調用proc.terminate。 – user1264304