python高级进阶_29_生产者和消费者 设计模式

当我看到生产者和消费者模式后,让我激动不已, 想起来一个词语,数学之美,如果你能从中体会到魅力之处,我相信你
一定会开心的笑起来。

生产者 和消费者 设计模式 使用的场景?

答: 只要看到 一边 生产数据,一边处理数据的时候,就可以用到这个模式

使用这个有什么好处 ?

第一: 一个类就做一件事情,这样 就可以使用多线程,全部都放一个类你多线程不好搞, 还有一个好处,修改代码容易看,并不是一坨屎。
第二 : 通过一个缓冲区(数据存储的地方) ,把他们串联起来, 这个缓冲区是可以跨线程的, 两个类都是操作一份
第三 : 只要 遇到 一个类 准备 数据, 另一个类处理数据 都可以用生产者和消费者,不要局限代码。
切记 设计模式是个思想, 只要符合这个特点就可以用 这个模型。
第四 : 可以把抽取数据类做分布式处理,只要把 文件分配到十个机器, 十个机器就可以处理。抽取数据做收集数据,并处理 数据。

代码演示 ,切记不要局限代码,要记住设计这个模式思想

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 里填东西并不局限 字符串, 列表 ,字典, 对象 ,都可以添加。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值