强制python子进程按特定顺序运行
我有一个程序,我需要两个进程同时运行,一个进程需要在另一个进程之前启动。还涉及其他子流程,这些子流程的基础是我在脚本中走了多远,以及在某些流程中发生了什么错误,但这些子流程都不需要在主两个流程运行时运行强制python子进程按特定顺序运行,python,multithreading,subprocess,Python,Multithreading,Subprocess,我有一个程序,我需要两个进程同时运行,一个进程需要在另一个进程之前启动。还涉及其他子流程,这些子流程的基础是我在脚本中走了多远,以及在某些流程中发生了什么错误,但这些子流程都不需要在主两个流程运行时运行 sys.stdout.flush() proc1 = subprocess.Popen(<command line tool>, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc1_data, proc1_stderr =
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完成之前运行吗?一旦启动,子流程就是独立的实体,它们将以自己喜欢的速度运行。您无法控制每个子流程内部发生的事情,除非在它们之间使用某种形式的进程间通信
现在还不完全清楚您想在这里做什么,但是如果您不想让子流程2通过一个特定的检查点,直到子流程1通过它自己的检查点,那么IPC正是您在这里需要的。如果您在包含macOS的Unix ish系统上,可以使用:have subprocess 2 call sem_wait阻塞,直到subprocess 1调用sem_post。Windows有一个非常相似的概念。我唯一的要求是,进程2只在进程1运行时运行,或者至少在进程1启动后启动。进程1通过USB向硬件设备发送数据x秒,进程2通过USB从依赖于第一个硬件设备状态的另一个硬件设备读取数据。