PHP前端开发

Python 进程间通信使用 Pipe 却收不到消息?

百变鹏仔 5天前 #Python
文章标签 收不到

python 进程间通信使用 pipe 却收不到消息?

在学习 python 的进程间通信时,使用 pipe 来传递数据遇到问题:父进程无法收到子进程发送的消息。这可能是因为参数传递错误造成的。

如下代码所示:

import osimport timefrom multiprocessing import pipe, processfd1, fd2 = pipe()def fun(name):    time.sleep(3)    # 向管道写入内容    fd1.send({name: os.getpid()})if __name__ == "__main__":    jobs = []    for i in range(5):        p = process(target=fun, args=(i,))        jobs.append(p)        p.start()    for i in range(5):        # 读管道        data = fd2.recv()        print(data)    for i in jobs:        i.join()

在这个示例中,子进程 fun 函数尝试将一个字典发送到父进程,但没有传递管道描述符 fd1。解决这个问题的正确方法是将管道描述符作为 fun 函数的第二个参数传递:

立即学习“Python免费学习笔记(深入)”;

def fun(name, fd):    time.sleep(3)    # 向管道写入内容    fd.send({name: os.getpid()})
if __name__ == "__main__":    jobs = []    for i in range(5):        p = Process(target=fun, args=(i, fd1))        jobs.append(p)        p.start()

这样修改后,父进程就能正确地从子进程接收数据了。