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写的Socks5协议代理服务器
Aug 06 Python
Python实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
python实现两个文件合并功能
Apr 01 Python
自学python的建议和周期预算
Jan 30 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
Python tkinter模版代码实例
Feb 05 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
pytorch 中autograd.grad()函数的用法说明
May 12 Python
python实现会员管理系统
Mar 18 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编写的导航条程序
2006/10/09 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
简单实现PHP留言板功能
2016/12/21 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
学校门卫工作职责
2013/12/07 职场文书
高中生活自我鉴定
2014/01/18 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
单位承诺书格式
2014/05/21 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python