Python os.pipe 与 multiprocessing.Pipe

标签 python multithreading multiprocessing pipe communication

最近我正在研究 Python 中的并行编程工具。这是 os.pipe 和 multiprocessing.Pipe 之间的两个主要区别。(尽管它们被使用的场合)

  1. os.pipe是单向,multiprocessing.Pipe是双向
  2. 将东西放入管道/从管道接收东西时,os.pipe 使用编码/解码,而 multiprocessing.Pipe 使用pickle/unpickle

我想知道我的理解是否正确,还有其他区别吗?谢谢。

最佳答案

我相信你所说的一切都是正确的。

在 Linux 上,os.pipe 只是一个用于访问传统 POSIX 管道的 Python 接口(interface)。在 Windows 上,它是使用 CreatePipe 实现的。当你调用它时,你会得到两个普通的文件描述符。它是单向的,您只需在一端向它写入字节,然后由内核缓冲,直到有人从另一端读取。它相当低级,至少按照 Python 标准是这样。

multiprocessing.Pipe 对象是更高级的接口(interface),使用 multiprocessing.Connection 对象实现。在 Linux 上,这些实际上是建立在 POSIX 套接字之上的,而不是 POSIX 管道。在 Windows 上,它们是使用 CreateNamedPipe API 构建的。正如您所指出的,multiprocessing.Connection 对象可以发送/接收任何可 picklable 对象,并将自动处理 pickling/unpickling 过程,而不仅仅是处理字节。它们既可以是双向的,也可以是单向的。

关于Python os.pipe 与 multiprocessing.Pipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720120/

相关文章:

python - 用换行符格式化 python 字典

java - 在Java中插入数据库时​​如何正确停止线程?

java - Java 中的可中断网络 I/O

python - Twitter、多进程和数据库

python - 停止 Tornado 中的请求

Python tarfile 大小

python - 在多处理中使用共享列表的正确方法是什么

python - 操作系统错误 : [Errno 12] Cannot allocate memory when using python multiprocessing Pool

python - Selenium WebDriverException 尝试保存屏幕截图时出错(Python 3.6)

java - 哪个实现更好 : Cache based on WeakHashMap or cache based on ThreadLocal?