Python的queue模組詳解
Queue
Queue是python標準函式庫中的執行緒安全的佇列(FIFO)實作,提供了一個適用於多執行緒程式設計的先進先出的資料結構,即佇列,用來在生產者與消費者執行緒之間的訊息傳遞
基本FIFO佇列
class Queue.Queue(maxsize=0)
FIFO即First in First Out,先進先出。 Queue提供了一個基本的FIFO容器,使用方法很簡單,maxsize是個整數,指明了佇列中能存放的資料個數的上限。一旦達到上限,插入會導致阻塞,直到隊列中的資料被消費掉。如果maxsize小於或等於0,則佇列大小沒有限制。
舉栗子:
1 import Queue2 3 q = Queue.Queue()4 5 for i in range(5):6 q.put(i)7 8 while not q.empty():9 print q.get()
#輸出:
01 2 3 4
LIFO佇列
class Queue.LifoQueue(maxsize=0)
LIFO即Last in First Out,後進先出。與堆疊的類似,使用也很簡單,maxsize用法同上再舉個栗子:1 import Queue2 3 q = Queue.LifoQueue()4 5 for i in range(5):6 q.put(i)7 8 while not q.empty():9 print q.get()
4 3 2 10
可以看到僅僅是將
Queue.Quenu類別
Queue.LifiQueue類別
#優先級佇列
class Queue.PriorityQueue(maxsize=0)
建構一個優先權佇列。 maxsize用法同上。import Queueimport threadingclass Job(object):def __init__(self, priority, description): self.priority = priority self.description = descriptionprint 'Job:',descriptionreturndef __cmp__(self, other):return cmp(self.priority, other.priority) q = Queue.PriorityQueue() q.put(Job(3, 'level 3 job')) q.put(Job(10, 'level 10 job')) q.put(Job(1, 'level 1 job'))def process_job(q):while True: next_job = q.get()print 'for:', next_job.description q.task_done() workers = [threading.Thread(target=process_job, args=(q,)), threading.Thread(target=process_job, args=(q,)) ]for w in workers: w.setDaemon(True) w.start() q.join() 结果 Job: level 3 job Job: level 10 job Job: level 1 jobfor: level 1 jobfor: level 3 jobfor: job: level 10 job
一些常用方法
#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異常(帶超時的阻塞呼叫)。
其非阻斷版本為
put_nowait
put(item, False)
get([block[, timeout]])
put方法
get(False)
#empty() ######若佇列為空,則回傳True,反之回傳False#####以上是Python的queue模組詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。
