【发布时间】:2013-11-13 15:25:19
【问题描述】:
subprocess.Popen(someexternalCommand) 创建并运行了 5 个进程。顺序启动命令很重要,例如在第一个进程启动并运行之前,第二个进程不得启动。 使用了以下代码:
proc1 = TrafficGenUtils.Popen(someexternalCommand)
time.sleep(10)
proc2 = TrafficGenUtils.Popen(someexternalCommand)
time.sleep(10)
...
当进程数为 3 时,执行顺序得以维持,但在进程数为 5 时,它几乎从未被维护,并且将睡眠时间增加到甚至 60 秒也无济于事。 如何强制 Popen 进程的执行是顺序的。 我的代码不起作用的原因是否与 Popen 依赖操作系统来创建进程但操作系统随时启动它们的事实有关?我正在使用 Windows 8 和 python 2.7
【问题讨论】:
-
你如何知道一个进程何时“已启动并运行”?然后你需要编写代码来教你的程序寻找相同的东西。如果您控制正在启动的进程的代码,这会容易得多(例如,一个进程可以在准备好时创建一个新文件,而您的主程序可以等待该新文件出现)。顺便说一句,
sleep()几乎从来都不是解决进程间(甚至线程间)通信问题的合适方法。 -
谢谢。但我无法控制主程序正在启动的进程。进程是 exe 文件。
-
所以我再次问:你如何知道进程何时“已启动并正在运行?”。这里没有魔法。你知道或者你不知道。如果你不知道,问题是无法解决的。如果你知道,那么你也必须教你的程序如何知道。
-
感谢您的指导。我想我会检查子进程是否在正在运行的进程列表中。
-
我希望这已经足够好了!猜不透。操作系统可能会启动一个进程(此时它将出现在正在运行的进程列表中),但是在操作系统将 CPU 提供给其他进程之前没有给它足够的时间(例如)完成初始化.这就是为什么如果您控制进程的代码,这会变得非常容易。您甚至可能需要等待子进程积累“足够”的 CPU 时间来猜测它可能已经准备好做一些有用的事情了。这里没有魔法:-(
标签: python python-2.7 multiprocessing popen