1. 程式人生 > >Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

今天給大家分享寫Python爬蟲不可不理解佇列Queue

Queue是python標準庫中的執行緒安全的佇列(FIFO)實現,

提供了一個適用於多執行緒程式設計的先進先出的資料結構,即佇列,

用來在生產者和消費者執行緒之間的資訊傳遞

更多Python視訊、原始碼、資料加群960410445免費獲取

基本FIFO佇列

class Queue.Queue(maxsize=0)

FIFO即First in First Out,先進先出。Queue提供了一個基本的FIFO容器,使用方法很簡單,maxsize是個整數,指明瞭佇列中能存放的資料個數的上限。一旦達到上限,插入會導致阻塞,直到佇列中的資料被消費掉。如果maxsize小於或者等於0,佇列大小沒有限制。

舉個栗子:

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

 

輸出:

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

 

LIFO佇列

class Queue.LifoQueue(maxsize=0)

LIFO即Last in First Out,後進先出。與棧的類似,使用也很簡單,maxsize用法同上

再舉個栗子:

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

 

輸出:

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

 

可以看到僅僅是將Queue.Quenu類替換為Queue.LifiQueue類

優先順序佇列

class Queue.PriorityQueue(maxsize=0)

構造一個優先佇列。maxsize用法同上。

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

 

結果

Python|成為爬蟲大牛,這個知識點佇列Queue你一定要理解

 

 

一些常用方法

task_done()

意味著之前入隊的一個任務已經完成。由佇列的消費者執行緒呼叫。每一個get()呼叫得到一個任務,接下來的task_done()呼叫告訴佇列該任務已經處理完畢。

如果當前一個join()正在阻塞,它將在佇列中的所有任務都處理完時恢復執行(即每一個由put()呼叫入隊的任務都有一個對應的task_done()呼叫)。

join()

阻塞呼叫執行緒,直到佇列中的所有任務被處理掉。

只要有資料被加入佇列,未完成的任務數就會增加。當消費者執行緒呼叫task_done()(意味著有消費者取得任務並完成任務),未完成的任務數就會減少。當未完成的任務數降到0,join()解除阻塞。

put(item[, block[, timeout]])

將item放入佇列中。

如果可選的引數block為True且timeout為空物件(預設的情況,阻塞呼叫,無超時)。

如果timeout是個正整數,阻塞呼叫程序最多timeout秒,如果一直無空空間可用,丟擲Full異常(帶超時的阻塞呼叫)。

如果block為False,如果有空閒空間可用將資料放入佇列,否則立即丟擲Full異常

其非阻塞版本為put_nowait等同於put(item, False)

get([block[, timeout]])

從佇列中移除並返回一個數據。block跟timeout引數同put方法

其非阻塞方法為`get_nowait()`相當與get(False)

empty()

如果佇列為空,返回True,反之返回False

你學會了嗎?