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脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
Python制作爬虫采集小说
Oct 25 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
Python中安装easy_install的方法
Nov 18 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
Python如何读写CSV文件
Aug 13 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
python对文档中元素删除,替换操作
Apr 02 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/02/25 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
Python urlopen 使用小示例
2008/09/06 Python
Python 探针的实现原理
2016/04/23 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
python2与python3共存问题的解决方法
2018/09/18 Python
详解Anaconda 的安装教程
2020/09/23 Python
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
个人简历自我评价八例
2013/10/31 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
给公司的建议书范文
2014/05/13 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
名人演讲稿范文
2014/09/16 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
《春酒》教学反思
2016/02/22 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
Python进程间的通信之语法学习
2022/04/11 Python