#coding:utf-8
"""
fzh created on 2019/10/15
构建一个队列
"""
import datetimeclass LoopQueue(object):def __init__(self, n=10):self.arr = [None] * (n+1)  # 由于特意浪费了一个空间,所以arr的实际大小应该是用户传入的容量+1self.front = 0self.tail = 0self.size = 0def __str__(self):return str(self.arr)def __len__(self):return len(self.arr)def __iter__(self):return iter(self.arr)def get_size(self):# 获取队列元素个数return self.sizedef get_capaticty(self):# 获取队列容积(实际可存储元素个数)return self.__len__() - 1def is_full(self):# 判断队列是否为满return (self.tail+1) % len(self.arr) == self.frontdef is_empty(self):# 判断队列是否为空return self.size == 0def get_front(self):# 获取队首return self.arr[self.front]def enqueue(self, e):# 入队if self.is_full():self.resize(self.get_capaticty() * 2)  # 如果队列满,以当前队列容积的2倍进行扩容self.arr[self.tail] = eself.tail = (self.tail+1) % len(self.arr)self.size += 1def dequeue(self):# 出队if self.is_empty():raise Exception("Cannot dequeue from en empty queue")result = self.arr[self.front]self.arr[self.front] = Noneself.front = (self.front+1) % len(self.arr)self.size -= 1# 如果元素个数少于容积的1/4并且元素个数if self.size < self.get_capaticty() // 4 and self.get_capaticty() > 1:self.resize(self.get_capaticty() // 2)return resultdef resize(self, new_capacity):new_arr = [None] * (new_capacity+1)for i in range(self.size):new_arr[i] = self.arr[(i+self.front) % len(self.arr)]self.arr = new_arrself.front = 0self.tail = self.sizedef main(loop_queue,imgs_list_path):start_time = datetime.datetime.now()for i, img_list_path in enumerate(imgs_list_path):loop_queue.enqueue(img_list_path)print('\n---------测试enqueue----------')print('Loop_Queue: size = {0} , capacity = {1}'.format(loop_queue.get_size(), loop_queue.get_capaticty()))print('loop_queue:', loop_queue)# print('is_empty:', loop_queue.is_empty())# print('is_full:', loop_queue.is_full())print('get_front:', loop_queue.get_front())print('=====队列输出结果=====')#算法处理完,更新数据,同时出队for i in range(loop_queue.get_size()):deq_res = loop_queue.dequeue()print('deq_res:', deq_res)#加入算法处理过程last_time = datetime.datetime.now() - start_timeprint('---------测试dequeue----------')print('Loop_Queue: size = {0} , capacity = {1}'.format(loop_queue.get_size(), loop_queue.get_capaticty()),loop_queue)# print('is_empty:', loop_queue.is_empty())# print('is_full:', loop_queue.is_full())print('get_front:', loop_queue.get_front())# #这个是去异步轮询查找数据库,如果没有处理的,加入队列# for i, img_list_path in enumerate(imgs_list_path):#     loop_queue.enqueue(img_list_path)# print(loop_queue)
if __name__ == '__main__':imgs_list_path = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']loop_queue = LoopQueue()main(loop_queue,imgs_list_path)

python实现可扩容队列相关推荐

  1. Python实现双端队列

    Python实现双端队列 关于双端队列的介绍,请参考:https://blog.csdn.net/weixin_43790276/article/details/104033337 双端队列的数据存储 ...

  2. 【数据结构Python描述】优先级队列描述“银行VIP客户插队办理业务”及“被插队客户愤而离去”的模型实现

    文章目录 一.支持插队模型的优先级队列 队列ADT扩充 队列记录描述 方法理论步骤 `update(item, key, value)` `remove(item)` 二.支持插队模型的优先级队列实现 ...

  3. Python数据结构之环形队列

    Python数据结构之环形队列 环形队列:主要解决假溢出现象: 公式: rear = front = -1 添加数据 rear = (rear+1) % MAX_SIZE 删除数据 front = ( ...

  4. (王道408考研数据结构)第三章栈和队列-第五节:Java、C++、Python实现栈和队列

    专栏目录首页:[专栏必读]王道考研408数据结构+计算机算法设计与分析万字笔记.题目题型总结.注意事项.目录导航和思维导图 文章目录 一:栈的实现 (1)C语言实现 (2)C++实现 (3)Java实 ...

  5. python 实现栈和队列

    本文不涉及栈和队列概念的详细讲解,而着重利用 python 实现栈和队列,其中穿插代码讲解. 其它数据结构:链表.二叉树. 目录 栈 构造栈 压栈 出栈 栈顶 判空 大小 栈的使用 队列 构造队列 入 ...

  6. python deque双端队列的神奇用法

    python中的deque双端队列,类似list的任意一端都可实现较快的add和pop操作 from collections import dequed=deque(maxlen=20) for i ...

  7. python线程池阻塞队列_福利又来啦!python多线程进阶篇

    使用Python中的线程模块,能够同时运行程序的不同部分,并简化设计.如果你已经入门Python,并且想用线程来提升程序运行速度的话,希望这篇教程会对你有所帮助. 通过阅读本文,你将了解到:什么是死锁 ...

  8. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  9. python使用redis队列_【Python】python使用redis做队列服务

    系统中引入消息队列机制是对系统一个非常大的改善.例如一个web系统中,用户做了某项操作后需要发送邮件通知到用户邮箱中.你可以使用同步方式让用户等待邮件发送完成后反馈给用户,但是这样可能会因为网络的不确 ...

最新文章

  1. 前后台使用ajax传list的时候,用value[] 获取值
  2. VS2013环境生成和调用DLL动态链接库
  3. 【学习笔记】5、Python基础语法
  4. linux 多线程 多进程同步
  5. 《Adobe Illustrator CS5中文版经典教程》—第0课0.5节使用绘图模式
  6. Swoole的全双工、半双工和单工
  7. Alibaba微服务事务Seata源码深度剖析 - 笔记
  8. 计算机硬件教学设计高中信息,重大版信息技术七上《计算机硬件系统》教学设计.doc...
  9. 一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法
  10. 基于Hexo+Node.js+github+coding搭建个人博客——基础篇
  11. 01 分布式系统架构的冰与火
  12. 【聚焦群落生态学】统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法
  13. ajax传参后台中文乱码
  14. 个人信息安全现状及保护方法
  15. java开发用win7好还是win10_win7和win10系统哪个好用
  16. KerberosSDR代码笔记(5) 信号处理(采样时间延迟计算、相位差计算的2种方法、MUSIC算法)
  17. Speedoffice(PPT)如何设置文字顶部对齐
  18. 当用户用input() 函数输入演员名字在屏幕 上打印出xx出演电影xx
  19. 世界人工智能大会阿里巴巴专场论坛《数字时代的技术责任》来了
  20. 撤销博士学位!取消硕导资格!科技部最新通报一批科研不端案件...

热门文章

  1. 利用瑞利里兹方法计算固有频率的程序_不可不知的电机磁致伸缩计算方法
  2. 训练神经网络时如何确定batch size?
  3. MyFlash——美团点评的开源MySQL闪回工具
  4. 深度剖析开源分布式监控CAT
  5. 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
  6. 开源开放 | 欢迎选修浙江大学《知识图谱》开放共享慕课
  7. Android官方开发文档Training系列课程中文版:高效显示位图之加载大位图
  8. 02 复习流程语句 以及跳转语句
  9. H5唤醒app,不完全兼容
  10. 在VMware中装Win server 2012配置Hyper-v