如何将第二个进程生成的PID数据传递至持续运行的第一个进程?
进程间传递PID并处理的解决方案
要实现将第二个进程生成的Y.exe PID传递给无限运行的第一个进程,需要使用进程间通信(IPC)机制,Python的multiprocessing模块提供了Queue(队列)来安全传递数据,同时可以用Event确保服务器X先启动完成再启动Y.exe。
修改后的代码如下:
from subprocess import Popen, PIPE from multiprocessing import Process, Queue, Event import time def firstproc(queue, ready_event): # 启动服务器X.exe process = Popen('X.exe', stdout=PIPE, text=True) # text=True让输出为字符串而非字节 # 标记服务器已启动完成 ready_event.set() while True: # 读取X.exe的输出 chunk = process.stdout.readline() if chunk: print(f"X.exe输出: {chunk.strip()}") # 检查队列中是否有新的PID需要处理 while not queue.empty(): pid = queue.get() # 这里添加你对PID的处理逻辑,比如打印、发送给X.exe等 print(f"收到Y.exe的PID: {pid}") # 短暂休眠避免占用过多CPU time.sleep(0.1) def secondproc(queue, ready_event): # 等待服务器X启动完成 ready_event.wait() def getPID(): proc = Popen('Y.exe') return proc.pid # 生成20个PID并放入队列 for _ in range(20): pid = getPID() queue.put(pid) # 可选:如果Y.exe启动需要间隔,添加短暂休眠 # time.sleep(0.05) def main(): # 创建进程间通信队列和同步事件 pid_queue = Queue() server_ready = Event() p1 = Process(target=firstproc, args=(pid_queue, server_ready)) p2 = Process(target=secondproc, args=(pid_queue, server_ready)) p1.start() p2.start() # 等待子进程结束(可选,因为firstproc是无限运行,这里可以注释掉) # p1.join() # p2.join() if __name__ == "__main__": main()
关键修改说明
- Queue:作为两个进程间的消息传递容器,
secondproc生成PID后放入队列,firstproc从队列中取出并处理,保证数据传递的安全性。 - Event:实现进程同步,确保
secondproc在X.exe完全启动后才开始启动Y.exe,避免服务器未就绪的问题。 - 队列循环检查:在
firstproc的无限循环中,每次读取X.exe输出后检查队列,确保不会遗漏任何PID。 text=True:将Popen的输出转为字符串,简化字节数据的处理流程。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

