Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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子进程按特定顺序运行_Python_Multithreading_Subprocess - Fatal编程技术网

强制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从依赖于第一个硬件设备状态的另一个硬件设备读取数据。