queue隊列

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
...
相關文章
相關標籤/搜索