Queue的说明

  1. 对于Queue,在多线程通信之间扮演重要的角色
  2. 添加数据到队列中,使用put()方法
  3. 从队列中取数据,使用get()方法
  4. 判断队列中是否还有数据,使用qsize()方法

生产者消费者模式的说明

为什么要使用生产者和消费者模式

在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。

什么是生产者消费者模式

生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。

这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦。

例如:

from threading import Thread

import queue

importtime

q = queue.Queue() # 创建一个队列容器,用来保存生产者产生的数据

classProducer(Thread):

"""生产者线程"""

def run(self):

count = 0

while True:

if q.qsize() < 50:

for i in range(3):

count += 1

msg = "产品 %d" % count

q.put(msg)

print("生产者%s 生产了一个数据 %s" % (self.name, msg))

time.sleep(1)

classCustomer(Thread):

"""消费者线程"""

def run(self):

while True:

if q.qsize() > 20:

for i in range(2):

msg = q.get()

print("消费者%s 消费了一个数据 %s" % (self.name, msg))

time.sleep(1)

fori in range(3):

p = Producer()

p.start()

fori in range(5):

c = Customer()

c.start()

python中的生产者与消费者模式相关推荐

  1. Python中的生产者与消费者模式(转载)

    利用多线程和队列可以实现生产者消费者模式.该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度. 1.什么是生产者和消费者? 在线程世界里,生产者就是生产数据(或者说发布任务)的线程 ...

  2. python中的 生产者和消费者

    什么是生产者消费者模式 在软件开发过程中,经常会遇到这样的情景: 某些模块负责生产数据,这些数据由其他模块来负责处理(此处的模块可能是:函数.线程.进程等).产生数据的模块称为生产者,而处理数据的模块 ...

  3. python 生产者和消费者模式_Python爬虫:生产者和消费者模式

    认识生产者和消费者模式 生产者和消费者是多线程中很常见的一个问题.产生数据的模块,我们称之为生产者,而处理数据的模块,就称为消费者.但是单单只有生产者和消费者显然还是不够的,一般来说,我们还有一个缓冲 ...

  4. 生产者与消费者模式(python 版)

    1. 队列 先进先出 2. 栈 先进后出 Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 ...

  5. python 多线程并发编程(生产者、消费者模式),边读图像,边处理图像,处理完后保存图像实现提高处理效率

    文章目录 需求 实现 先导入本次需要用到的包 一些辅助函数 如下函数是得到指定后缀的文件 如下的函数一个是读图像,一个是把RGB转成BGR 下面是主要的几个处理函数 在上面几个函数构建对应的处理函数 ...

  6. 线程间的协作(2)——生产者与消费者模式

    2019独角兽企业重金招聘Python工程师标准>>> 1.何为生产者与消费者 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程. import java.util. ...

  7. 认识生产者和消费者模式

    认识生产者和消费者模式 生产者和消费者是多线程中很常见的一个问题.产生数据的模块儿,我们称之为生产者,而处理数据的模块,就称为消费者.但是单单只有生产者和消费者显然还是不够的,一般来说,我们还有一个缓 ...

  8. Java多线模式-Producer-Consumer模式(生产者、消费者模式)

    1.场景 有些时候需要两个或两个以上的线程协同工作,每个线程需要使用其他线程产生数据. 2.详细说明 可以把上面的场景抽象成生产者和消费者模式.从消费者的角度:消费者需要消费生产者生成的产品. 从生产 ...

  9. 多线程通信—生产者和消费者模式

    1.队列Queue: 从一个线程向另一个线程发送数据最安全的方式可能就是使用queue库中的队列了.创建一个被多个线程共享的Queue对象,这些线程通过使用put()和get()操作来向队列中添加或者 ...

最新文章

  1. 从冬奥会开幕式谈起,AI的艺术造诣如何?
  2. 【python图像处理】python绘制饼状图
  3. boost::pfr::tuple_size_v相关的测试程序
  4. boost :: dynamic_bitset时序测试
  5. Django在admin.py中设置date_hierarchy时报错
  6. uni-app-微信小程序实现输入卡号 每四个为一组中间为空格(也可以取消空格)
  7. 【线段树】开关(luogu 3870)
  8. 【java基础】idea配置jdk环境,创建项目输出“你好世界“实例
  9. python import出错_python – ImportError:无法导入名称’app’
  10. CSS图片重叠效果~秒懂
  11. Linux下定时备份数据库
  12. linux自动升级关闭,Ubuntu关闭内核自动更新
  13. 读后感——《软件工程》——软件的本质及软件工程
  14. 冒泡排序c语言子程序,C语言之冒泡排序算法
  15. 这种公司再也呆不下去了!我要跳槽!
  16. 宽屏扁平化结婚恋爱整站HTML5模板
  17. 径向基函数神经网络(RBFNN)
  18. 哄睡宝宝的有限状态机
  19. requests爬取IT橘子
  20. 项目管理:确定目标有哪些作用?

热门文章

  1. JVM自动内存管理机制——Java内存区域(下)
  2. Java 删除ArrayList中重复元素,保持顺序
  3. hihoCoder #1758 加减
  4. Git学习笔记01--初始化设置
  5. JAVA软件工程师应该具备的技能有哪些?
  6. doctype声明、浏览器的标准、怪异等模式
  7. “函数调用的左操作数”的理解
  8. 【转】DATAGRIDVIEW控制
  9. 福州公交车与拖拉机相撞1人死亡
  10. SkipList 以及高度的确定