python 数据结构 队列(queue)
如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10293817.html
欢迎关注小婷儿的博客:
有问题请在博客下留言或加作者微信:tinghai87605025 或 QQ :87605025
python QQ交流群:py_data 483766429
博客园:http://www.cnblogs.com/xxtalhr/
csdn:https://blog.csdn.net/u010986753
一、概念
队列(queue)是一种先进先出的(First In First Out)的线性表,简称FIFO。队列允许在一端进行插入操作,而在另一端进行删除操作。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作
二、作用
解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。
提高处理效率:FIFO = 现进先出,LIFO = 后入先出。
注:队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可。请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他线程处理这分数据,它实现了解耦,提高效率。队列内会有一个有顺序的容器,列表与这个容器是有区别的,列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留。当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。
1 class Queue: 2 def queue(self): 3 '''入队''' 4 def dequeue(self): 5 '''出队''' 6 if __name__ == '__main__': 7 xxt = [1, 2, 3, 4] 8 #相当于在队尾插入元素 9 xxt.insert(1, 10) 10 xxt.insert(0, 20)#0代表队尾 11 print('insert:',xxt) 12 13 #相当于从队首删除元素 14 xxt.pop() 15 print('pop:',xxt)
'''结果
insert: [20, 1, 10, 2, 3, 4]
pop: [20, 1, 10, 2, 3]
'''
三、队列参数介绍
Queue.Queue(maxsize=0) FIFO, 如果maxsize小于1就表示队列长度无限
Queue.LifoQueue(maxsize=0) LIFO, 如果maxsize小于1就表示队列长度无限
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.get([block[, timeout]]) 读队列,取出数据 ,没有数据将会等待timeout等待时间
Queue.put(item, [block[, timeout]]) 写队列,放入数据,timeout等待时间
Queue.queue.clear() 清空队列
class queue.PriorityQueue(maxsize=0) 存储数据时可设置优先级的队列,优先级设置数越小等级越高
Queue.get(timeout = 1)如果1秒后没取到数据就退出
Queue.get_nowait() 取数据,如果没数据抛queue.Empty异常
Queue.task_done()后续调用告诉队列,任务的处理是完整的。
1 from collections import deque 2 queue = deque(["Eric", "John", "Michael"]) 3 print('queue:',queue) 4 queue.append("Terry") 5 print('queue.append:',queue) 6 queue.append("Graham") 7 print('queue.append:',queue) 8 queue.popleft() 9 print('queue.popleft:',queue) 10 queue.popleft() 11 print('queue.popleft:',queue) 12 13 '''结果 14 queue: deque(['Eric', 'John', 'Michael']) 15 queue.append: deque(['Eric', 'John', 'Michael', 'Terry']) 16 queue.append: deque(['Eric', 'John', 'Michael', 'Terry', 'Graham']) 17 queue.popleft: deque(['John', 'Michael', 'Terry', 'Graham']) 18 queue.popleft: deque(['Michael', 'Terry', 'Graham']) 19 '''
来源: https://www.cnblogs.com/xiangsikai/p/8185031.html
OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。
重要的事多做几遍。。。。。。
文章内容来源于小婷儿的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解 有趣的事,Python永远不会缺席!
如需转发,请注明出处:小婷儿的博客python https://www.cnblogs.com/xxtalhr/
博客园:https://www.cnblogs.com/xxtalhr/
CSDN:https://blog.csdn.net/u010986753
有问题请在博客下留言或加作者:
微信:tinghai87605025
QQ :87605025
python QQ交流群:py_data 483766429
培训说明:
OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。重要的事多说几遍。。。。。。