如何解决multiprocessing.Pipe() 返回的连接对象是否在不同进程中共享?
问题
我创建了两个子进程来与 Pipe 通信。在主进程中parent_conn
是一个实参,我打印了parent_conn
的地址。在 sender() 函数中,parent_conn
是形参并打印它的地址。
我发现地址不同,所以它们是不同的变量?这个程序中有两个管道吗?一个在主进程中,另一个在 sender() 函数中。我认为不同的流程不会共享可变的原因。
- 如果是这样,为什么在形参中传达的信息会影响实参?换句话说,为什么 sender() 的管道可以向主进程的管道发送数据?
- 如果不是,则在 sender() 函数中运行
conn.close()
。在主函数中,我发现打印parent_conn.closed
时它没有关闭。为什么会这样?
最小的可运行示例
import multiprocessing
def sender(conn,msgs):
"""
function to send messages to other end of pipe
"""
print(conn)
for msg in msgs:
conn.send(msg)
print("Sent the message: {}".format(msg))
conn.close()
def receiver(conn):
"""
function to print the messages received from other
end of pipe
"""
while True:
msg = conn.recv()
if msg == "END":
break
print("Received the message: {}".format(msg))
if __name__ == "__main__":
# messages to be sent
msgs = ["hello","hey","hru?","END"]
# creating a pipe
parent_conn,child_conn = multiprocessing.Pipe()
print(parent_conn)
# creating new processes
p1 = multiprocessing.Process(target=sender,args=(parent_conn,msgs))
p2 = multiprocessing.Process(target=receiver,args=(child_conn,))
# running processes
p1.start()
p2.start()
# wait until processes finish
p1.join()
p2.join()
print(parent_conn.closed)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。