2024-05-19 07:06:52 发布
网友
最近我在用Python学习并行编程工具。这里有两个主要区别os.管道以及多处理.管道(不管使用的场合如何)
我想知道我的理解是否正确,还有其他区别吗?谢谢您。在
我相信你所说的一切都是正确的。在
在Linux上,os.pipe只是一个用于访问传统POSIX管道的Python接口。在Windows上,它是使用CreatePipe实现的。当你调用它时,你会得到两个普通的文件描述符。它是单向的,只需在一端写入字节,然后由内核缓冲,直到有人从另一端读取数据。它是相当低级的,至少在Python标准中是这样。在
os.pipe
CreatePipe
multiprocessing.Pipe对象是更高级的接口,使用multiprocessing.Connection对象实现。在Linux上,它们实际上是构建在POSIX套接字之上的,而不是POSIX管道之上。在Windows上,它们是使用CreateNamedPipeAPI构建的。如您所述,multiprocessing.Connection对象可以发送/接收任何可选择的对象,并将自动处理pickling/unpickle过程,而不仅仅是处理字节。它们既可以是双向的,也可以是单向的。在
multiprocessing.Pipe
multiprocessing.Connection
CreateNamedPipe
我相信你所说的一切都是正确的。在
在Linux上,
os.pipe
只是一个用于访问传统POSIX管道的Python接口。在Windows上,它是使用CreatePipe
实现的。当你调用它时,你会得到两个普通的文件描述符。它是单向的,只需在一端写入字节,然后由内核缓冲,直到有人从另一端读取数据。它是相当低级的,至少在Python标准中是这样。在multiprocessing.Pipe
对象是更高级的接口,使用multiprocessing.Connection
对象实现。在Linux上,它们实际上是构建在POSIX套接字之上的,而不是POSIX管道之上。在Windows上,它们是使用CreateNamedPipe
API构建的。如您所述,multiprocessing.Connection
对象可以发送/接收任何可选择的对象,并将自动处理pickling/unpickle过程,而不仅仅是处理字节。它们既可以是双向的,也可以是单向的。在相关问题 更多 >
编程相关推荐