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 Web开发框架Django
Jun 30 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
numpy数组广播的机制
Jul 12 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
详解pandas apply 并行处理的几种方法
Feb 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
Javascript模板技术
2007/04/27 Javascript
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
自己开发Dojo的建议框架
2008/09/24 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
python pdb调试方法分享
2014/01/21 Python
Python实现二分法算法实例
2015/02/02 Python
python中list常用操作实例详解
2015/06/03 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
餐厅执行经理岗位职责范本
2014/02/26 职场文书
会计员岗位职责
2014/03/15 职场文书
节约能源标语
2014/06/17 职场文书
525心理活动总结
2014/07/04 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
新年晚会开场白
2015/05/29 职场文书
中学总务处工作总结
2015/08/12 职场文书
师德培训心得体会2016
2016/01/09 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS