如需转发, 请注明出处: 小婷儿的 pythonhttps://www.cnblogs.com/xxtalhr/p/10293817.html
有问题请在博客下留言或加作者微信: tinghai87605025 或 QQ :87605025
python QQ 交流群: py_data483766429
博客园: http://www.cnblogs.com/xxtalhr/
csdn:https://blog.csdn.net/u010986753
一, 概念
队列 (queue) 是一种先进先出的 (First In First Out) 的线性表, 简称 FIFO. 队列允许在一端进行插入操作, 而在另一端进行删除操作. 允许插入的一端为队尾, 允许删除的一端为队头. 队列不允许在中间部位进行操作
二, 作用
解耦: 使程序直接实现松耦合, 修改一个函数, 不会有串联关系.
提高处理效率:FIFO = 现进先出,LIFO = 后入先出.
注: 队列可以并发的派多个线程, 对排列的线程处理, 并切每个需要处理线程只需要将请求的数据放入队列容器的内存中, 线程不需要等待, 当排列完毕处理完数据后, 线程在准时来取数据即可. 请求数据的线程只与这个队列容器存在关系, 处理数据的线程 down 掉不会影响到请求数据的线程, 队列会派给其他线程处理这分数据, 它实现了解耦, 提高效率. 队列内会有一个有顺序的容器, 列表与这个容器是有区别的, 列表中数据虽然是排列的, 但数据被取走后还会保留, 而队列中这个容器的数据被取后将不会保留. 当必须在多个线程之间安全地交换信息时, 队列在线程编程中特别有用.
- class Queue:
- def queue(self):
- '''入队'''
- def dequeue(self):
- '''出队'''
- if __name__ == '__main__':
- xxt = [1, 2, 3, 4]
- #相当于在队尾插入元素
- xxt.insert(1, 10)
- xxt.insert(0, 20)#0 代表队尾
- print('insert:',xxt)
- #相当于从队首删除元素
- xxt.pop()
- 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()后续调用告诉队列, 任务的处理是完整的.
- from collections import deque
- queue = deque(["Eric", "John", "Michael"])
- print('queue:',queue)
- queue.append("Terry")
- print('queue.append:',queue)
- queue.append("Graham")
- print('queue.append:',queue)
- queue.popleft()
- print('queue.popleft:',queue)
- queue.popleft()
- print('queue.popleft:',queue)
- '''结果
- queue: deque(['Eric', 'John', 'Michael'])
- queue.append: deque(['Eric', 'John', 'Michael', 'Terry'])
- queue.append: deque(['Eric', 'John', 'Michael', 'Terry', 'Graham'])
- queue.popleft: deque(['John', 'Michael', 'Terry', 'Graham'])
- queue.popleft: deque(['Michael', 'Terry', 'Graham'])
- '''
来源: http://www.bubuko.com/infodetail-2927247.html