Python的並發並行[2] -> 隊列 -> queue 模塊
queue 模塊 / queue Module
1 常量 / Constants
Pass
2 函數 / Function
Pass
3 類 / Class
3.1 Queue類
類實例化:queue = queue.Queue(maxsize=0)
類的功能:用於生成一個先入先出隊列實例
傳入參數: maxsize
maxsize: int類型,隊列的最大值,無空間時阻塞,未指定時為無限隊列
返回參數: queue
queue: instance類型,生成的先入先出隊列實例
3.1.1 put()方法
函數調用: queue.put(item, block=True, timeout=None)
函數功能:將item放進隊列中
傳入參數: item, block, timeout
item: int/str/obj等類型,放進隊列中的項目
block: bool類型,設置阻塞,True則阻塞,False則會引發異常
timeout: None/int類型,設置阻塞超時時間(s),None則無限時阻塞
返回參數: 無
3.1.2 get()方法
函數調用: item = queue.get(block=True, timeout=None)
函數功能:將item從隊列中取出
傳入參數: block, timeout
block: bool類型,設置阻塞,True則阻塞,False則會引發異常
timeout: None/int類型,設置阻塞超時時間(s),None則無限時阻塞
返回參數: item
item: int/str/obj等類型,從隊列中取出的項目
3.1.3 put_nowait()方法
函數調用: queue.put_nowait(item)
函數功能:無等待將item放進隊列中,相當於put(item, False),失敗則引發Full異常
傳入參數: item
item: int/str/obj等類型,放進隊列中的項目
返回參數: 無
3.1.4 get_nowait()方法
函數調用: item = queue.get_nowait()
函數功能:無等待將item從隊列中取出,相當於get(False),失敗則引發Empty異常
傳入參數: 無
返回參數: item
item: int/str/obj等類型,隊列中取出的項目
3.1.5 task_done()方法
函數調用: queue.task_done()
函數功能: 用於表明一個任務已經完成,設置完成標誌,常用於隊列的消耗線程,每一個get()函數取出一個item,隨後可以設置一個task_done,當所有隊列的任務都標記完成後,join將釋放阻塞
傳入參數: 無
返回參數: 無
3.1.6 join ()方法
函數調用: queue.join()
函數功能:用於阻塞當前的線程,等待join之前所有的隊列(包括join之前入列並出列的任務)任務都設置了task_done標誌後,才會解除阻塞
傳入參數: 無
返回參數: 無
3.1.7 qsize()方法
函數調用: size = queue.qsize()
函數功能:返回當前隊列的大小(由於其他線程存在修改,該值並不準確,為近似值)
傳入參數: 無
返回參數: size
siez: int類型,隊列中item的數量
3.1.8 empty()方法
函數調用: status = queue.empty()
函數功能:返回當前隊列的狀態,為空返回True,否則返回False,與qsize一樣,返回的是一個近似值,若需要等待所有隊列結束,建議使用join()函數
傳入參數: 無
返回參數: status
status: bool類型,True表示當前隊列為空
3.1.9 full()方法
函數調用: status = queue.full()
函數功能:返回當前隊列的狀態,隊列已滿返回True,否則返回False,同樣返回的是一個近似值
傳入參數: 無
返回參數: status
status: bool類型,True表示當前隊列為空
3.2 LifoQueue類
類實例化:queue = queue.LifoQueue(maxsize=0)
類的功能:用於生成一個後入先出隊列實例
傳入參數: maxsize
maxsize: int類型,隊列的最大值,無空間時阻塞,未指定時為無限隊列
返回參數: queue
queue: instance類型,生成的後入先出隊列實例
Note:
對於LifoQueue類,其基類是Queue,在源代碼中重定義了Queue的_init, _qsize, _put, _get函數,使其在隊列的處理順序上有所不同(其本質為向隊列列表中取出item時_get()函數使用的是popleft函數還是pop函數),其父類的函數均可以繼承使用。
3.3 PriorityQueue類
類實例化:queue = queue.PriorityQueue(maxsize=0)
類的功能:用於生成一個優先級隊列實例,最小的最優取出
傳入參數: maxsize
maxsize: int 類型,隊列的最大值,無空間時阻塞,未指定時為無限隊列
返回參數: queue
queue: instance類型,生成的優先級隊列實例
Note:
對於PriorityQueue類,其基類也是Queue,同樣在源代碼中重定義了Queue的_init, _qsize, _put, _get函數,使其在隊列的處理順序上有所不同(其本質為向隊列列表中取出item時_get()使用了heappop函數,而放入時使用了heappush函數),父類函數同樣可繼承使用。
3.4 Empty異常類
類實例化:無
類的功能:用於當隊列為空且調用get*()方法時拋出的異常
傳入參數: 無
返回參數: 無
3.5 Full異常類
類實例化:無
類的功能:用於當隊列已滿且調用put*()方法時拋出的異常
傳入參數: 無
返回參數: 無
Python的並發並行[2] -> 隊列 -> queue 模塊