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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python计算字符宽度的方法
Jun 14 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
python实现简单中文词频统计示例
Nov 08 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
PyTorch中的Variable变量详解
Jan 07 Python
django中嵌套的try-except实例
May 21 Python
python+requests接口自动化框架的实现
Aug 31 Python
python 怎样进行内存管理
Nov 10 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
PHP编码转换
2012/11/05 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
Laravel日志用法详解
2016/10/09 PHP
零基础php编程好学吗
2019/10/11 PHP
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
electron实现静默打印的示例代码
2019/08/12 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
python实现web方式logview的方法
2015/08/10 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Python检测数据类型的方法总结
2019/05/20 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
详解Python中的Lock和Rlock
2021/01/26 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
毕业生个人求职信范例分享
2013/12/17 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
大学军训感言400字
2014/03/11 职场文书
信用卡收入证明范本
2015/06/12 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server