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())

结果:

Alt text

注意:
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')

posted on 2016-11-10 14:31  jayafs  阅读(97)  评论(0)    收藏  举报

导航