1、区别
(1)Queue使用 putget维护队列 ,pipe使用 send recv维护队列 。
(2)pipe只提供两个端点,而Queue没有限制。
这意味着在使用 Pipe 时,只能同时启动两个进程。一个生产者和一个消费者对这两个端点(pipe()返回的两个值)进行操作,共同维护一个队列。如果多个进程同时在管道的同一个端点上操作,就会发生错误(因为没有锁,类似于线程不安全)。因此,两个端点相当于只为进程提供了两个安全的运行位置,从而将进程的数量限制为只有 2 个。
(3)Queue的封装性较好。队列只提供一个结果,可以被多个进程同时调用; Pipe() 返回两个结果,分别被两个进程调用。
(4)Queue的实现基于pipe,所以pipe的运行速度比Queue快很多
(5) 管道在只需要两个进程时速度更快,而队列在需要多个进程同时对队列进行操作时使用。
2、实例
import random
import time
from multiprocessing import Process, Pipe, current_process
def produce(conn):
while True:
new = random.randint(0, 100)
print('{} produce {}'.format(current_process().name, new))
conn.send(new)
time.sleep(random.random())
def consume(conn):
while True:
print('{} consume {}'.format(current_process().name, conn.recv())) time.sleep(random.random())
if __name__ == '__main__':
pipe = Pipe()
p1 = Process(target=produce, args=(pipe[0],))
p2 = Process(target=consume, args=(pipe[1],))
p1.start()
p2.start()
以上就是python中Queue和pipe的差别,希望能对大家有所帮助。
更多Python学习指路:
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
内容反馈