python--隊列、生產者消費者模型


隊列:

import queue

q = queue.Queue()   #先入先出
print(q.empty())  #判斷是否為空,空返回True
q.put("d1")
q.put("d2")
q.put("d3")
print(q.full()) #判斷是否滿,滿返回True
print(q.get())  #d1
print(q.get())  #d2
print(q.get())  #d3
print(q.get(timeout=1))  #阻塞 可以使用q.get(timeout = 1)設置超時來解決阻塞問題,拋出queue.Empty異常
print(q.get_nowait()) #接上一行的例子,還可以設置不要等待,沒有數據即刻拋出異常
print(q.qsize()) #或者使用if判斷qsize是否等於0
print(q.get(block=False))   #block參數False也可以解決程序阻塞問題



#設置具有長度限制的隊列
q = queue.Queue(maxsize=3)  #長度為3
q.put(1)
q.put(2)
q.put(3)
q.put(4, block=False) #這里程序又阻塞了,所以可以使用block,timeout參數解決阻塞問題,異常queue.Full

q = queue.PriorityQueue() #設置優先級隊列,數字小的優先級高
q.put((1, "King"))
q.put((-1, "Jeson"))
q.put((10, "Tim"))
q.put((5, "Mike"))


# q = queue.LifoQueue() #設置后入先出隊列
# q.put(1)
# q.put(2)
# q.put(3)
# print(q.get())
# print(q.get())
# print(q.get())

 

生產者消費者模型:

import threading
import time
import queue


q = queue.Queue(maxsize=10)


def producer(name):  #生產者
    count = 1
    while True:
        q.put("骨頭%s" % count)
        print("生產了骨頭", count)
        count += 1
        time.sleep(0.5)


def consumer(name):  #消費者
    while True:
        print("[%s]取到[%s]並且吃了它..." % (name, q.get()))
        time.sleep(1)
        
p = threading.Thread(target=producer, args=("Tim",))
c1 = threading.Thread(target=consumer, args=("King",))
c2 = threading.Thread(target=consumer, args=("Wang",))

p.start()
c1.start()
c2.start()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM