我正在尝试使用命名管道在守护进程和客户端之间设置双向通信。尝试打开用于输入的命名管道时代码挂起为什么?
class comm(threading.Thread):
def __init__(self):
self.srvoutf = './tmp/serverout'
self.srvinf = './tmp/serverin'
if os.path.exists(self.srvoutf):
self.pipein = open(self.srvoutf, 'r')
#-----------------------------------------------------Hangs here
else:
os.mkfifo(self.srvoutf)
self.pipein = open(self.srvoutf, 'r')
#-----------------------------------------------------or here
if os.path.exists(self.srvinf):
self.pipeout = os.open(self.srvinf, os.O_WRONLY)
else:
os.mkfifo(self.srvinf)
self.pipeout = os.open(self.srvinf, os.O_WRONLY)
threading.Thread.__init__ ( self )
从specification for open():
换句话说,当打开命名管道进行读取时,默认情况下,打开的管道将被阻塞,直到管道的另一侧被打开进行写入。若要解决此问题,请使用
os.open()
,并在命名管道的读取端传递os.O_NONBLOCK
。相关问题 更多 >
编程相关推荐