day21队列
队列
作用
- 1、解耦(解除关联性)
- 2、提高效率
队列就是一个有顺序的容器。
问题:列表也是有顺序的容器;那它们的区别?
- 列表取其中的数据相当于复制;取出的只是内容的复制结果
- 队列取出数据;数据就会从队列中消失
方法
queue.Queue()
先进先出
.put()
往队列里面添加数据
1.import queue
2.
3.q = queue.Queue()
4.q.put("d1")
.psize()
1.查看队列大小
2.import queue
3.
4.q = queue.Queue()
5.q.put("d1")
6.ret = q.qsize()
7.print(ret)
结果:
1.1
.full()
设置队列的容量
.get()
取数据;遵从先进先出的原则;会一个个的按照先进先出的顺序取数据
接收2个参数
- block:默认为True;i表示超出最大容量的时候;会不会出去等待状态;设为False的时候;晁错就报错
- timeout:默认None;表示超出容量时等待的时间;超过时间结束等待!
1.import queue
2.
3.q = queue.Queue()
4.q.put("d1")
5.
6.print(q.get())
7.print(q.get())
结果:
注意:
1、如果数据取完了;再执行的时候;会出现服务端等待的状态;等待新的数据加入;而且会一直卡在那里
2、看结果暂停键一直处于等待状态
问题:如果要想取出来;然后不卡在那里怎么办?
- 1、get()里面接收2个参数;默认block=True;设置为False的时候会取消等待状态;但是会报错!
-
2、接收第二个参数;timeout:表示设置等待时间;超过时间;等待状态就结束;结果为空同样报错!
.get_nowait()
和get的功能一样;只是输入对列为空的话;不回卡在那里;会报错!和get()里面block参数设为False一样
1.import queue
2.
3.q = queue.Queue()
4.q.put("d1")
5.
6.print(q.get())
7.print(q.get_nowait())
结果:内容为空会报错!
小技巧:
可以通过qsize检测队列的内容;来判断内容;为0的时候就不取嘛
queue.LifoQueue()
先进后出
PriorityQueue(maxsize=0)
存储数据时可设置优先级的队列
1.import queue
2.
3.q = queue.PriorityQueue()
4.q.put((10,"haha"))
5.q.put((6, "heihei"))
6.q.put((-1, "hehe"))
7.
8.print(q.get())
9.print(q.get())
10.print(q.get())
结果:
1.(-1, 'hehe')
2.(6, 'heihei')
3.(10, 'haha')
浙公网安备 33010602011771号