python2.x Queue python3.x queue
作用:1、提高效率;2、完成程序的解耦。
队列可以理解为一个有序的容器,但跟列表不同的是,队列里的数据取出来就没有了。
class queue.Queue(maxsize=0) 先入先出
class queue.LifoQueue(maxsize=0) 后入先出(last in first out)
class queue.PriorityQueue(maxsize=0) 存储数据时可以设置优先级的队列
Queue.put(item, block=True, timeout=None) 往队列里放数据(block表示如果满了是否等待取出)
Queue.get(block=True, timeout=None) 往队列里取数据(如果队列里没有数据就一直等待,因为block默认为True表示阻塞,timeout可以设置等待时间)
Queue.get_nowait() 往队列里取数据(不等待,如果没有数据就抛出异常)
Queue.qsize() 队列大小
Queue.empty() 是否为空
Queue.full() 是否满了
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
加入队列时设置优先级的例子(按元组的第一个元素升序排列)
import Queue q = Queue.PriorityQueue() q.put((6, 'vivi')) q.put((1, 'Allen')) q.put((3, 'Jackson')) print q.get() print q.get() print q.get()
输出:
(1, 'Allen')
(3, 'Jackson')
(6, 'vivi')
生产者消费者模型
#coding=utf-8 import threading import Queue import time q = Queue.Queue(maxsize=10) def writer(): index = 1 while True: print u'辉哥写出了bug{}'.format(index) q.put('bug{}'.format(index)) time.sleep(1) index += 1 def tester(): while True: print u'华哥测出了{}'.format(q.get()) time.sleep(0.5) wt = threading.Thread(target=writer) tt = threading.Thread(target=tester) wt.start() tt.start() 运行结果: 辉哥写出了bug1 华哥测出了bug1 辉哥写出了bug2 华哥测出了bug2 辉哥写出了bug3 华哥测出了bug3 辉哥写出了bug4 华哥测出了bug4 辉哥写出了bug5 华哥测出了bug5 辉哥写出了bug6 华哥测出了bug6 ...