python2.x Queue python3.x queuepython
做用:一、提升效率;二、完成程序的解耦。python3.x
隊列能夠理解爲一個有序的容器,但跟列表不一樣的是,隊列裏的數據取出來就沒有了。函數
class queue.Queue(maxsize=0) 先入先出spa
class queue.LifoQueue(maxsize=0) 後入先出(last in first out)code
class queue.PriorityQueue(maxsize=0) 存儲數據時能夠設置優先級的隊列orm
Queue.put(item, block=True, timeout=None) 往隊列裏放數據(block表示若是滿了是否等待取出)blog
Queue.get(block=True, timeout=None) 往隊列裏取數據(若是隊列裏沒有數據就一直等待,由於block默認爲True表示阻塞,timeout能夠設置等待時間)隊列
Queue.get_nowait() 往隊列裏取數據(不等待,若是沒有數據就拋出異常)utf-8
Queue.qsize() 隊列大小get
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 ...