使用生产者消费者模型实现RD-QA解耦

在前面有讲到使用yield实现单线程下并发的例子,详细可参考如下链接https://blog.csdn.net/qq_44801116/article/details/97698438,今天主要亲测使用queue实现真正的多线程之间的并发。
一、知识点简介
(1)生产者消费者模型是通过一个容器解决生产者和消费者的强耦合问题。在并发编程中主要用于解决并发的问题。
(2)queue
queue可以完成将程序由强耦合变为弱耦合,也可以提高工作效率。
主要有两个方法:
put(item,block=True,timeout=None):将数据放到队列中,默认放不进了会堵塞,超时时间默认未设置。
get(block=True,timeout=None):读取队列中数据,默认读取不到了会堵塞,超时时间默认未设置。
在定义queue时工作有三种模式:
先进先出:q = queue.Queue()
后进先出:q = queue.LifoQueue()
优先出:q = queue.PriorityQueue()
(3)生产者消费者模型与queue的结合
生产者queue.put放数据——》queue《——消费者queue.get读取数据

二、实际代码
import threading,time,queue

def RD(name):
“”""
该部分为生产者部分-开发不断完成项目
“”"
count = 1
while True:
q.put(“Project %s”%count)
print("[%s]开发完成了Project %s"%(name,count))
count +=1
time.sleep(1)

def QA(name):
“”"
该部分为消费者部分-对开发完的项目进行测试
:return:
“”"
while True:
print("[%s]负责[%s]测试"%(name,q.get()))

q = queue.Queue(maxsize=5)
p =threading.Thread(target=RD,args = (“Mr Song”,))
c1 =threading.Thread(target=QA,args = (“Mr Liu”,))
c2 =threading.Thread(target=QA,args = (“Miss Ye”,))
p.start()
c1.start()
c2.start()
三、三种测试场景
代码主要用常见的RD开发项目(生产者为宋先生),QA测试项目(消费者为刘先生和叶女士)
(1)未增加延时
在这里插入图片描述
显然宋先生不断开发新的项目,刘先生和叶女士分别很默契的进行项目的测试。
(1)生产者速度快于消费者
消费者中增加sleep时间,运行结果如下:
在这里插入图片描述
由图可知,宋先生的开发速度不受测试速度的影响,宋先生可以踏实不断开发,刘先生和叶女士可以也有节奏的进行测试。
(2)消费者快于生产者
生产者增加sleep时间,运行结果如下:
在这里插入图片描述
由图可知,测试同学可按照开发速度进行工作。

发布了55 篇原创文章 · 获赞 4 · 访问量 7630

猜你喜欢

转载自blog.csdn.net/qq_44801116/article/details/101320958