消息隊列queue
阿新 • • 發佈:2018-09-03
線程編程 log code ack stdin class 需要 ref cal 一、queue
優先級隊列: q3 = queue.PriorityQueue(maxsize= 0) #放入元組數據,第一個參數越小優先級越高
在多線程編程中,程序的解耦往往是一個麻煩的問題,以及在socket網絡編程中也會有這樣的問題。recv 和send之間,如果服務端有消息,問題需要發送給客戶端,而那邊的recv 被主程序占用,而使用多線程加 隊列queue,我們就可以把消息發送到queue,而不用管對方怎麽處理是否處理,同樣對於服務端。
- 消息隊列queue在多線程編程中是一個非常好用的模塊。
先進先出:q1 = queue.Queue(maxsize= 0) # first in first out
先進後出: q2 = queue.FifoQueue(maxsize= 0) # last in first out
- 隊列的幾種常用方法
- q.put(item, block= True, timeout= 0) #第一個參數為數據,第二個為是否阻塞,如隊列滿了,就阻塞住程序,不讓放進去, 第三超時時間
q.get(block= True, timeout= 0) #同理put, 隊列為空阻塞,如果block為False就不阻塞。
- q.qsize() 查看當前隊列長度,如當q.qsize()>0 時,你就去q.get()
- q.empty() 如果當前隊列為空則返回True,也可用來檢查隊列中是否有任務等場景
q.full() 同上隊列滿了返回True
>>> import queue >>> q= queue.Queue(10) >>> q.put(1) >>> q.put(2) >>> q.qsize() 2 >>> q.empty() False >>> q.full() False >>> q.get(block=False) 1 >>> q.get(block=False) 2 >>> q.get(block=False) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "E:\python35\lib\queue.py", line 161, in get raise Empty queue.Empty
消息隊列實現生產者消費者模型
消息隊列queue