使用多进程库中的管道进行进程间通信时,我注意到poll函数的一些奇怪行为。如果我关闭管道的另一端,poll()函数将返回true,这有点奇怪。Python文档并没有真正说明应该期望什么。尽管如此,我认为如果管道中绝对没有数据并且另一端已经关闭,poll()至少应该返回false。我使用的是Python3.3.2,但它似乎适用于Python 2.7.5。这是故意的还是一个bug?如果不是一个bug,那它有什么作用?
import multiprocessing
if __name__ == '__main__':
con = multiprocessing.Pipe(True)
con1, con2 = con
print(str(con1.poll())) #prints False
con2.close()
con1.close()
con = multiprocessing.Pipe(True)
con1, con2 = con
con2.close()
print(str(con1.poll())) #prints True
con1.close()
poll()
将引发异常,或者如果从另一侧关闭,则会生成错误。这是唯一正确的处理方式。 - Overdrivrrecv
后,即使过时了也要读取 EOFError 异常。 - user430051