1. 程式人生 > >Python的並發並行[2] -> 隊列 -> queue 模塊

Python的並發並行[2] -> 隊列 -> queue 模塊

.get 釋放 函數調用 heap get() time 每一個 pos function

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 模塊