多处理的永久阻塞。使用 os.write 时的 Pipe() 的 recv



由于某些原因,以下代码永远阻止

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表示相等的数据量。

你可以在这里和这里看到这方面的证据。

相关内容

  • 没有找到相关文章

最新更新