强制python子进程在特定ord中运行

2024-09-25 04:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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完成之前运行


Tags: datatime进程stderrstdoutline流程tool
1条回答
网友
1楼 · 发布于 2024-09-25 04:29:09

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

现在还不完全清楚您想在这里做什么,但是如果您不想让子流程2通过一个特定的检查点,直到子流程1通过它自己的检查点,那么IPC正是您在这里需要的。如果您在Unix ish系统(包括macOS)上,可以使用semaphore:have subprocess 2 call sem_wait来阻止,直到subprocess 1调用sem_post。Windows有一个非常相似的概念

相关问题 更多 >