在之前的python版本中,對(duì)于queue模塊的引用都是
import Queue
當(dāng)我在python3 版本中同樣這樣導(dǎo)入,會(huì)返回
ModuleNotFoundError: No module named 'Queue'
意識(shí)到改版了的問題,嘴上輕生mmp,默默打開了官方文檔,在這記錄一下簡(jiǎn)單的用法。
首先,按照慣例,先來個(gè)簡(jiǎn)介
功能
queue模塊用于在多個(gè)線程之間交換信息
三種模式
FIFO:先進(jìn)先出,實(shí)力化方式:
fq = queue.Queue(maxsize)
maxsize:隊(duì)列的大小,如果小于或者等于0,就是一個(gè)無限大的隊(duì)列,本文中所有的maxsize都一個(gè)意思
LIFO:后進(jìn)先出
lq = queue.LifoQueue(maxsize)
Priority queue:優(yōu)先級(jí)隊(duì)列,默認(rèn)按照元素大小進(jìn)行排序,最小的最先輸出。
pq = queue.PriorityQueue(maxsize)
共有的常用方程
Queue.qsize() 返回隊(duì)列的大小
Queue.empty() 如果隊(duì)列為空,返回True,反之False
Queue.full() 如果隊(duì)列滿了,返回True,反之False,
Queue.get([block[, timeout]])獲取隊(duì)列,timeout等待時(shí)間
Queue.get_nowait() 相當(dāng)于Queue.get(block = False),非阻塞方法 Queue.put(item) 寫入隊(duì)列,timeout等待時(shí)間
Queue.put_nowait(item)相當(dāng)于Queue.put(block = False),非阻塞方法
Queue.task_done() 在完成一項(xiàng)工作之后,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號(hào)。每個(gè)get()調(diào)用得到一個(gè)任務(wù),接下來task_done()調(diào)用告訴隊(duì)列該任務(wù)已經(jīng)處理完畢。
Queue.join() 實(shí)際上意味著等到隊(duì)列為空,再執(zhí)行別的操作
簡(jiǎn)介完畢,下面 上代碼!
import queue
#初始化一個(gè)大小為3的fifo隊(duì)列
fq = queue.Queue(3)
#用這個(gè)來看看基礎(chǔ)的常用方程
#判斷隊(duì)列是否為空,
print(fq.empty()) #這個(gè)位置的都是輸出結(jié)果 True
#添加一個(gè)元素
fq.put(13,block = True,timeout = 3) #無返回值
#判斷是否滿了
print(fq.full()) #False
print(fq.qsize()) # 1
#再添加一個(gè)元素
fq.put_nowait(23)
#取回元素
print(fq.get_nowait()) #13
print(fq.get()). #23. 由此可以看出,這個(gè)是一個(gè)先進(jìn)先出的隊(duì)列
#后進(jìn)先出
lq = queue.LifoQueue()
for i in range(5):
lq.put(i)
while not lq.empty():
print(lq.get(),end=' ')
#4 3 2 1 0
#優(yōu)先級(jí)隊(duì)列
pq = queue.PriorityQueue()
pq.put(20)
pq.put(25)
pq.put(1)
while not pq.empty():
print(pq.get(),end=' ')
#1 20 25
Note:優(yōu)先級(jí)隊(duì)列有很大的靈活性,它的sort函數(shù)可以根據(jù)自己的需求去寫。