Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中强制Popen进程按特定顺序执行_Python_Python 2.7_Multiprocessing_Popen - Fatal编程技术网

在python中强制Popen进程按特定顺序执行

在python中强制Popen进程按特定顺序执行,python,python-2.7,multiprocessing,popen,Python,Python 2.7,Multiprocessing,Popen,subprocess.Popen(someexternalCommand)创建并运行了5个进程。命令按顺序启动很重要,例如,在第一个进程启动并运行之前,第二个进程不得启动。 使用了以下代码: proc1 = TrafficGenUtils.Popen(someexternalCommand) time.sleep(10) proc2 = TrafficGenUtils.Popen(someexternalCommand) time.sleep(10) ... 当进程数为3时,执行顺序保持不变,

subprocess.Popen(someexternalCommand)创建并运行了5个进程。命令按顺序启动很重要,例如,在第一个进程启动并运行之前,第二个进程不得启动。 使用了以下代码:

proc1 = TrafficGenUtils.Popen(someexternalCommand)
time.sleep(10)
proc2 = TrafficGenUtils.Popen(someexternalCommand)
time.sleep(10)
...
当进程数为3时,执行顺序保持不变,但当进程数为5时,执行顺序几乎从未保持过,将睡眠时间增加到60秒也无济于事。 如何强制Popen进程的执行是连续的。
我的代码无法工作的原因是否与Popen依赖操作系统来创建进程,但操作系统可以随时启动进程这一事实有关?我正在使用Windows8和Python2.7启动一个新的进程,因此从那一刻起,由操作系统来安排运行时间。您不仅不能假设一个进程将在另一个进程之前运行,而且您甚至不能假设父进程将让子进程执行,因为实际上可能不会

为了创建顺序执行,您可以使用
proc1.wait()
停止父进程,直到子进程完成其执行。通过这种方式,您可以保证进程将按顺序运行,因为父进程在子进程结束之前不会继续运行,因此不会产生其他子进程


请在中阅读更多信息。

谢谢。但是,我的问题是,我不希望第一个子进程结束,然后第二个子进程开始,而是希望第一个子进程开始,第二个子进程开始,依此类推。子进程将在后台运行,直到我对其调用proc.terminate。您如何知道进程何时“启动并运行”?然后,您需要编写代码来教您的程序寻找相同的东西。如果您控制正在启动的进程的代码,这可能会容易得多(例如,一个进程可以在准备就绪时创建一个新文件,您的主程序可以等待该新文件出现)。顺便说一句,
sleep()
几乎从来都不是解决进程间(甚至线程间)通信问题的合适方法。谢谢。但我不能控制主程序启动的过程。进程是exe文件。所以我再次问:你如何知道进程何时“已经启动并正在运行”。这里没有魔法。你知道或不知道。如果你不知道,这个问题是无法解决的。如果你确实知道,那么你也必须教你的程序如何知道。谢谢你的指导。我想我会检查子进程是否在正在运行的进程列表中。我希望这足够好!猜不到。操作系统可以启动一个进程(此时它将出现在正在运行的进程列表中),但在操作系统将CPU分配给其他进程之前,没有给它足够的时间(例如)完成初始化。这就是为什么如果控制流程的代码,这会变得非常容易。您甚至可能需要等待一个子进程积累“足够”的CPU时间来猜测它可能已经准备好做一些有用的事情了。这里没有魔法:-(