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的Flask框架的简介和安装方法
Nov 13 Python
详解Django的CSRF认证实现
Oct 09 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
Python序列化pickle模块使用详解
Mar 05 Python
parser.add_argument中的action使用
Apr 20 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
Python学习之os包使用教程详解
Mar 21 Python
Python数据结构之队列详解
Mar 21 Python
详解OpenCV曝光融合
Apr 29 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下实现折线图效果的代码
2007/04/28 PHP
php URL验证正则表达式
2011/07/19 PHP
php while循环得到循环次数
2013/10/26 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP中的事务使用实例
2015/05/26 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
js动态切换图片的方法
2015/01/20 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
Python对象属性自动更新操作示例
2018/06/15 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
python的dict判断key是否存在的方法
2020/12/09 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
计算机应用专业推荐信
2013/11/13 职场文书
建筑项目策划书
2014/01/13 职场文书
体育教师自我鉴定
2014/02/12 职场文书
合作意向书范本
2019/04/17 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
php中pcntl_fork详解
2021/04/01 PHP
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python