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 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
Python文件处理
Feb 29 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
详解python中的json和字典dict
Jun 22 Python
Python实现的txt文件去重功能示例
Jul 07 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 Python
python对接ihuyi实现短信验证码发送
May 10 Python
python 安全地删除列表元素的方法
Mar 16 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获取字符串的编码格式的方法(函数)
2013/06/21 PHP
php制作文本式留言板
2015/03/18 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
python 域名分析工具实现代码
2009/07/15 Python
如何搜索查找并解决Django相关的问题
2014/06/30 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
python for循环remove同一个list过程解析
2019/08/14 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python爬虫基础知识点整理
2020/06/02 Python
python如何输出反斜杠
2020/06/18 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
信息技术培训感言
2014/03/06 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
厕所文明标语
2014/06/11 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers