当我看到生产者和消费者模式后,让我激动不已, 想起来一个词语,数学之美,如果你能从中体会到魅力之处,我相信你
一定会开心的笑起来。
生产者 和消费者 设计模式 使用的场景?
答: 只要看到 一边 生产数据,一边处理数据的时候,就可以用到这个模式
使用这个有什么好处 ?
第一: 一个类就做一件事情,这样 就可以使用多线程,全部都放一个类你多线程不好搞, 还有一个好处,修改代码容易看,并不是一坨屎。
第二 : 通过一个缓冲区(数据存储的地方) ,把他们串联起来, 这个缓冲区是可以跨线程的, 两个类都是操作一份
第三 : 只要 遇到 一个类 准备 数据, 另一个类处理数据 都可以用生产者和消费者,不要局限代码。
切记 设计模式是个思想, 只要符合这个特点就可以用 这个模型。
第四 : 可以把抽取数据类做分布式处理,只要把 文件分配到十个机器, 十个机器就可以处理。抽取数据做收集数据,并处理 数据。
代码演示 ,切记不要局限代码,要记住设计这个模式思想
from threading import Thread
from queue import Queue
import time
class Produce(Thread):
num=0
def run(self):
while True: # 轮询 不停的做if 判断
if queue.qsize()<1000: # 判断 queue 的容量 ,如果小于 就开始生产
for i in range(10):
queue.put("我生产了序号为%d"%(self.num)) # 循环十次 ,并在queue 容器里追加
self.num += 1
print("我生产了序号为%d"%(self.num))
time.sleep(3)
class Consume(Thread):
def run(self):
while True:
if queue.qsize()>100: #判断 queue 的容量 ,如果大于 就开始消费
for i in range(3):
msg="我消费了序号为%d"%i+ queue.get() #循环三次 并不停的去除 queue 的值
print(msg)
time.sleep(3)
if __name__=="__main__":
queue=Queue()
for i in range(500):
queue.put("这是我初始化的东西,序号为%d"%i) # 初始化数据
for i in range(2):
p1=Produce()
p1.start()
for i in range(5):
p2=Consume()
p2.start()
切记
queue.put(“这是我初始化的东西,序号为%d”%i) # 初始化数据
往queue 里填东西并不局限 字符串, 列表 ,字典, 对象 ,都可以添加。