Python生产者和消费者模型
生产者和消费者模型中有两个重要的角色,生产者负责产生数据,消费者负责获取这些数据进行接下来的操作
为什么要使用生产者和消费者模型?
在并发编程中,如果生产者处理数据速度很快,而消费者处理速度比较慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者,等待生产者生产完毕,才能继续接下的操作。为了解决这个等待的问题,就引入了生产者与消费者模型。
使用生产者和消费者模型的三个要素:
1.生产者
2.消费者
3.队列(Queue)
并不是一定要使用队列,也可以使用其他的容器,但是队列不用考虑锁的问题
如何使用这个模型
当程序中出现明显的两个任务,一类负责生产,一类负责处理生产的数据时(例:爬虫)
使用此模型有什么好处
1.实现了生产者和消费者之间互相等待的问题
2.平衡生产者和消费者之间的关系,生产者可以一直生产,消费者可以慢慢消费,两者不直接联系,而是通过队列沟通
简单的例子:
from queue import Queue
from threading import Thread
import time
# 创建队列
q = Queue(10)
def producer(name):
"""生产者"""
count = 1 #计数器
while True:
q.join() #等待task_done()发送信号
q.put(count)
print(f"{name}正在生产第{count}个包子")
count+=1
def customer(name):
"""消费者"""
count = 1
while True:
baozi = q.get()
print(f"消费者-{name}正在吃第{count}个包子")
count+=1
q.task_done() #吃完后发送信号
time.sleep(1)
if __name__ == '__main__':
t1 = Thread(target=producer,args=("张大厨",))
t2 = Thread(target=customer,args=("小明",))
t1.start()
t2.start()
运行结果