上下文
我一直在看多处理队列Python 2.7
的源代码SEE HERE,有一些问题。在
deque用于缓冲区,放入队列中的任何项都会附加到deque中,但是对于get(),则使用管道。
我们可以看到,在put过程中,如果进料器线程还没有启动,它就会启动。
线程将从线程中弹出对象并将它们发送到上述管道的读取端。
问题
那么,为什么要用烟斗和烟斗呢?
难道不能使用一个deque(或任何其他具有FIFO行为的数据结构)来同步push和pop吗?
同样的,我们不能用一个管道,包装发送和接收吗?
也许这里有些东西我遗漏了,但给料机的螺纹弹出的项目,并把他们放在管道上似乎有点过火。在
出列只能在一个进程内存中,因此不可能使用它在进程之间传递数据(…*)
您可以只使用一个
Pipe
,但之后需要用锁来保护它,我想这就是为什么引入了出列。在multiprocessing.Queue
是标准Queue
的一个端口,能够在多个进程上运行。因此,它试图重现同样的行为。在deque
是一个两边都有快速插入/提取的列表,理论上是无限大的。它非常适合表示堆栈或队列。但它不适用于不同的流程。在Pipe
更像一个套接字,允许跨进程传输数据。管道是操作系统对象,它们的实现因操作系统而异。此外,管道的尺寸有限。如果您填充了一个管道,您对send
的下一次调用将阻塞,直到它的另一端没有被排空。在如果您想公开一个
Queue
,它能够以与标准流程相似的方式跨多个进程工作,那么您需要以下特性。在put
和get
方法可以让用户决定何时阻止程序流。在使用
deque
aThread
和Pipe
是提供这些特性的最简单方法之一,但它不是唯一的方法。在我个人更喜欢使用裸管道让进程进行通信,因为这样可以让我对应用程序有更多的控制。在
相关问题 更多 >
编程相关推荐