2013-11-02 70 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