python隊列
阿新 • • 發佈:2017-05-11
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先入先出(FIFO)(q.get()) # get時也是默認阻塞的,其他參數與put相同 q.task_done() # 阻塞進程,當隊列中任務執行完畢後,不再阻塞。表示任務執行完畢 q.join()
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隊列