强制python子进程按特定顺序运行

时间:2019-02-18 22:43:40

标签: python multithreading subprocess

我有一个程序,其中我需要两个进程同时运行,并且一个进程需要在另一个进程之前启动。还涉及其他子流程,例如,我在脚本中的运行距离以及某些流程中发生的错误,但是在运行两个主要流程时都不需要运行这些子流程。

sys.stdout.flush()

proc1 = subprocess.Popen(<command line tool>, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
proc1_data, proc1_stderr = proc1.communicate() 
time.sleep(0.1) # allow time proc1 to kick in

proc2 = subprocess.Popen(<command line tool>, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc2_data, proc2_stderr = proc2.communicate() 

proc2.wait()
proc1.kill()
proc2.kill()

# do error checking among other things in other subprocesses based on this data

这有时会起作用,但是通过查看在proc1和proc2期间打开的硬件上的LED指示灯,我可以看到它们有时不同步,因为proc2有时会在proc1开启之前运行并完成。 / p>

有什么方法可以确保流程按顺序启动?而proc2在proc1完成之前运行?

1 个答案:

答案 0 :(得分:1)

一旦启动,子流程就是独立的实体,它们将以它们想要的任何速度运行。您无法控制每个子流程中发生的事情- ,除非您在它们之间使用某种形式的进程间通信(IPC)。

尚不完全清楚您要在此处执行的操作,但是如果您不希望子进程2在子进程1通过其自己的检查点之前通过特定的检查点,那么IPC正是您在这里需要的。如果您使用的是Unix-ish系统(包括macOS),则可以使用semaphore:阻塞子进程2调用sem_wait,直到子进程1调用sem_post。 Windows的概念非常相似。