1. 程式人生 > >python隊列

python隊列

print div als size pri img 長度 nbsp 時也

先入先出隊列:

技術分享
import queue

q = queue.Queue(10) # 10為隊列長度

for i in range(5):
    q.put(i, block=False)  # block=False為非阻塞,默認為阻塞
    print(q.qsize())    # 隊列元素個數

q.put(hehe, timeout=2)    # 超時時間為2秒
print(q.full())     # 判斷隊列是否滿了
print(q.maxsize)    # 隊列最大個數

while not q.empty():    # 隊列是否為空,不為空就取數據
    print
(q.get()) # get時也是默認阻塞的,其他參數與put相同 q.task_done() # 阻塞進程,當隊列中任務執行完畢後,不再阻塞。表示任務執行完畢 q.join()
先入先出(FIFO)

task_done()意味著之前入隊的一個任務已經完成。由隊列的消費者線程調用,每一個get()調用得到一個任務,接下來的task_done()調用告訴隊列該任務已經執行完畢

如果當前一個join()正在阻塞,它將在隊列中的所有任務都處理完時恢復執行(即get後又task_done)

常用方法:

q.qsize() 返回隊列的大小
q.empty() 如果隊列為空,返回True,反之False
q.full() 如果隊列滿了,返回True,反之False
q.full 與 maxsize 大小對應
q.get([block[, timeout]]) 獲取隊列,timeout等待時間
q.get_nowait() 相當q.get(False)
非阻塞 q.put(item) 寫入隊列,timeout等待時間
q.put_nowait(item) 相當q.put(item, False)
q.task_done() 在完成一項工作之後,q.task_done() 函數向任務已經完成的隊列發送一個信號
q.join() 實際上意味著等到隊列為空,再執行別的操作

先入後出隊列(FILO):

技術分享
import queue
q = queue.LifoQueue()
for i in range(10):
    q.put(i)

while not q.empty():
    print(q.get())
先入後出

優先級隊列:

技術分享
優先級隊列
import queue
q = queue.PriorityQueue()
q.put((1, cable))
q.put((2, caocao))
q.put((3, sunquan))
q.put((2, liubei))        # 優先級相同的時候,先入者為先

while
not q.empty(): print(q.get())
優先級隊列

雙向隊列:

技術分享
雙向隊列
import queue
q = queue.deque()
q.append(123)
q.append(456)
q.appendleft(hehe)
print(q.pop())
print(q.popleft())
雙向隊列

python隊列