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

问题描述 投票:0回答:1

我有一个程序,我需要两个进程同时运行,一个进程需要在另一个进程之前启动。还有其他一些子进程涉及基于我在脚本中有多远以及在某些进程中发生了什么错误但在主要两个运行时不需要运行的任何子进程。

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打开之前运行并完成。

有没有办法确保流程按顺序启动?并且proc2在proc1完成之前运行?

python multithreading subprocess
1个回答
1
投票

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

你在这里尝试做什么并不完全清楚,但是如果你不希望子进程2通过一个特定的检查点,直到子进程1通过它自己的检查点,那么IPC正是你需要的。如果你使用的是Unix-ish系统(包括macOS),你可以使用semaphore:让子进程2调用sem_wait来阻塞,直到子进程1调用sem_post。 Windows有一个非常相似的概念。

© www.soinside.com 2019 - 2024. All rights reserved.