详解Python 模拟实现生产者消费者模式的实例


Posted in Python onAugust 10, 2017

详解Python 模拟实现生产者消费者模式的实例

散仙使用python3.4模拟实现的一个生产者与消费者的例子,用到的知识有线程,队列,循环等,源码如下:

Python代码

import queue 
import time 
import threading 
import random 
 
 
q=queue.Queue(5) 
 
#生产者 
def pr(): 
  name=threading.current_thread().getName() 
  print(name+"线程启动......") 
  for i in range(100): 
    t=random.randint(2,9) 
    print(name,"睡眠时间: ",t) 
    time.sleep(t); 
    d="A"+str(i) 
    print(name+"正在存第",i+1,"个数据: ",d) 
    #q.put("A"+str(i),False,2000) 
    q.put(d) 
  print("生产完毕!") 
 
 
#消费者 
def co(): 
  name=threading.current_thread().getName() 
  time.sleep(1) 
  print(name+"线程启动......") 
 
  while True: 
    print(name+"检测到队列数量: ",q.qsize()) 
    t=random.randint(2,9) 
    print(name,"睡眠时间: ",t) 
    data=q.get(); 
    print(name+"消费一个数据: ",data) 
 
 
 
 
p=threading.Thread(target=pr,name="生产者") 
c=threading.Thread(target=co,name="消费者1") 
c2=threading.Thread(target=co,name="消费者2") 
 
p.start() 
c.start() 
c2.start()

在本例里面散仙启动了1个生产者线程,2个消费者线程,打印效果如下:

Python代码 

生产者线程启动...... 
生产者 睡眠时间: 4 
消费者1线程启动...... 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 2 
消费者2线程启动...... 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 3 
生产者正在存第 1 个数据: A0 
生产者 睡眠时间: 9 
消费者1消费一个数据: A0 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 8 
生产者正在存第 2 个数据: A1 
生产者 睡眠时间: 5 
消费者2消费一个数据: A1 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 7 
生产者正在存第 3 个数据: A2 
生产者 睡眠时间: 8 
消费者1消费一个数据: A2 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 2 
生产者正在存第 4 个数据: A3 
生产者 睡眠时间: 7 
消费者2消费一个数据: A3 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 9 
生产者正在存第 5 个数据: A4 
生产者 睡眠时间: 2 
消费者1消费一个数据: A4 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 5 
生产者正在存第 6 个数据: A5 
生产者 睡眠时间: 5 
消费者2消费一个数据: A5 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 6 
生产者正在存第 7 个数据: A6 
生产者 睡眠时间: 7 
消费者1消费一个数据: A6 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 7 
生产者正在存第 8 个数据: A7 
生产者 睡眠时间: 3 
消费者2消费一个数据: A7 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 8 
生产者正在存第 9 个数据: A8 
生产者 睡眠时间: 2 
消费者1消费一个数据: A8 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 4 
生产者正在存第 10 个数据: A9 
生产者 睡眠时间: 4 
消费者2消费一个数据: A9 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 5 
生产者正在存第 11 个数据: A10 
生产者 睡眠时间: 2 
消费者1消费一个数据: A10 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 3 
生产者正在存第 12 个数据: A11 
生产者 睡眠时间: 3 
消费者2消费一个数据: A11 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 3 
生产者正在存第 13 个数据: A12 
生产者 睡眠时间: 3 
消费者1消费一个数据: A12 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 3 
生产者正在存第 14 个数据: A13 
生产者 睡眠时间: 8 
消费者2消费一个数据: A13 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 7 
生产者正在存第 15 个数据: A14 
生产者 睡眠时间: 3 
消费者1消费一个数据: A14 
消费者1检测到队列数量: 0 
消费者1 睡眠时间: 7 
生产者正在存第 16 个数据: A15 
生产者 睡眠时间: 2 
消费者2消费一个数据: A15 
消费者2检测到队列数量: 0 
消费者2 睡眠时间: 9

从这个例子中,我们发现利用队列,来做同步时非常简单方便的,除此之外队列,还有如下几个方便的方法:

介绍一下此包中的常用方法:   

Queue.qsize() 返回队列的大小  
Queue.empty() 如果队列为空,返回True,反之False  
Queue.full() 如果队列满了,返回True,反之False 
Queue.full 与 maxsize 大小对应  
Queue.get([block[, timeout]])获取队列,timeout等待时间  
Queue.get_nowait() 相当Queue.get(False) 
非阻塞 Queue.put(item) 写入队列,timeout等待时间  
Queue.put_nowait(item) 相当Queue.put(item, False) 
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 
Queue.join() 实际上意味着等到队列为空,再执行别的操作

以上就是详解Python 模拟实现生产者消费者模式的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
python验证码识别实例代码
Feb 03 Python
Pycharm更换python解释器的方法
Oct 29 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Django框架获取form表单数据方式总结
Apr 22 Python
python 5个实用的技巧
Sep 27 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
Python Django ORM连表正反操作技巧
Jun 13 Python
Python 操作文件的基本方法总结
Aug 10 #Python
Python 模拟登陆的两种实现方法
Aug 10 #Python
Python 网页解析HTMLParse的实例详解
Aug 10 #Python
关于Python中浮点数精度处理的技巧总结
Aug 10 #Python
Python 处理数据的实例详解
Aug 10 #Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 #Python
关于Python中空格字符串处理的技巧总结
Aug 10 #Python
You might like
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
javascript 事件绑定问题
2011/01/01 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
python动态参数用法实例分析
2015/05/25 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
《中华少年》教学反思
2014/02/15 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
市场部经理岗位职责
2015/02/02 职场文书
销售开票员岗位职责
2015/04/15 职场文书
图书馆义工感想
2015/08/07 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
社会实践心得体会范文
2016/01/14 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
使用javascript解析二维码的三种方式
2021/11/11 Javascript