由于某些原因,以下代码永远阻止
read, write = multiprocessing.Pipe()
os.write(write.fileno(), b"testn")
print(read.recv())
但这不是
read, write = multiprocessing.Pipe()
write.send("testn")
print(read.recv())
据我所知,multiprocessing.connection.Connection.send
只是在后台调用os.write
,所以在我看来,这应该没有不起作用的理由。这是怎么回事?
想明白了。对于任何在谷歌搜索时发现这一点的人,CPython将数据的大小作为标头发送,这意味着它正在等待与"test"的big-endian表示相等的数据量。
你可以在这里和这里看到这方面的证据。