Python queue队列原理与应用案例分析


Posted in Python onSeptember 27, 2019

本文实例讲述了Python queue队列原理与应用。分享给大家供大家参考,具体如下:

作用:

 解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。

 提高处理效率:FIFO = 现进先出,LIFO = 后入先出。

队列:

队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可。请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他线程处理这分数据,它实现了解耦,提高效率。队列内会有一个有顺序的容器,列表与这个容器是有区别的,列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留。当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。

参数介绍:

# 先入先出 maxsize 可设置大小,设置block=False抛异常
class queue.Queue(maxsize=0)
 # 后进先出
class queue.LifoQueue(maxsize=0)
# 存储数据时可设置优先级的队列
# 优先级设置数越小等级越高
class queue.PriorityQueue(maxsize=0)
# 放入数据
Queue.put(item, block=True, timeout=None)
# 取出数据 #没有数据将会等待
Queue.get(block=True, timeout=None)
# 如果1秒后没取到数据就退出
Queue.get(timeout = 1)
# 取数据,如果没数据抛queue.Empty异常
Queue.get_nowait()
# 查看队列大小
Queue.qsize()
# 返回True,如果空
Queue.empty() #return True if empty
# 设置队列大小
Queue.full()
# 后续调用告诉队列,任务的处理是完整的。
Queue.task_done()

生产者消费者模型:

import threading,time
import queue
# 最多存入10个
q = queue.Queue(maxsize=10)
def producer(name):
  count = 1
  while True:
      # 生产一块骨头
      q.put("骨头 %s" % count )
      print("生产了骨头",count)
      count +=1
      time.sleep(0.3)
def consumer(name):
  while True:
    print("%s 取到[%s] 并且吃了它" %(name, q.get()))
    time.sleep(1)
    # 告知这个任务执行完了
    q.task_done()
# 生成线程
p = threading.Thread(target=producer,args=("德国骨科",))
c = threading.Thread(target=consumer,args=("陈狗二",))
d = threading.Thread(target=consumer,args=("吕特黑",))
# 执行线程
p.start()
c.start()
d.start()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
简单介绍Python中的readline()方法的使用
May 24 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python 统计代码行数简单实例
May 04 Python
python实现发送邮件及附件功能
Mar 02 Python
python实现机器学习之元线性回归
Sep 06 Python
django Serializer序列化使用方法详解
Oct 16 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
python绘制封闭多边形教程
Feb 18 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
python多环境切换及pyenv使用过程详解
Sep 27 #Python
python 哈希表实现简单python字典代码实例
Sep 27 #Python
python实现发送form-data数据的方法详解
Sep 27 #Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 #Python
Pycharm 字体大小调整设置的方法实现
Sep 27 #Python
python3 写一个WAV音频文件播放器的代码
Sep 27 #Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 #Python
You might like
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
web前端开发也需要日志
2010/12/09 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
javascript的this关键字详解
2019/05/20 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Django与遗留的数据库整合的方法指南
2015/07/24 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
《画》教学反思
2014/04/14 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
MYSQL 运算符总结
2021/11/11 MySQL