我最近需要编写一个脚本来执行os.fork()以拆分为两个进程。子进程成为服务器进程并使用使用os.pipe()创建的管道将数据传递回父进程。像往常一样,孩子关闭'r'
管道的末端,父母关闭管道的'w'
末端。我使用os.fdopen将 pipe() 的返回转换为文件对象。
我遇到的问题是:进程成功分叉,孩子成为服务器。一切正常,孩子尽职尽责地将数据写入'w'
管道的开放端。不幸的是,管道的父端做了两件奇怪的事情:
A)它阻塞了管道末端的read()
操作'r'
。其次,除非末端完全关闭
,否则它无法读取放在管道上的任何数据。'w'
我立即认为缓冲是问题并添加了pipe.flush()调用,但这些没有帮助。
谁能解释为什么在写入端完全关闭之前数据不会出现?是否有使read()
呼叫非阻塞的策略?
这是我第一个分叉或使用管道的 Python 程序,如果我犯了一个简单的错误,请原谅我。