1. 程式人生 > >生產者、消費者、隊列

生產者、消費者、隊列

排隊 orm name 生產者和消費者 如果 rod 取數 lee queue隊列

‘‘‘
queue隊列,什麽是隊列?排隊幹一件事,誰去維護排隊的關系?預防插隊等
隊列是一個有順序的容器,有列表了還要隊列幹什麽。
根本區別是列表裏拿走一個數據,數據還在裏面。隊列是數據取走了就沒了
為什麽要用隊列?提高雙方效率,解耦合,生產者向隊列裏放,(隊列),消費者從隊列裏取
1、先入先出 queue.Queue(maxsize=0)
queue.put()放數據
    (如果放滿了再放就會阻塞,用queue.put(block=False)或q.put_nowait()拋異常,或者判斷隊列長度,為max就不取)
queue.get()取數據
    (如果取完了再取就會阻塞,用queue.get(block=False)或q.get_nowait()拋異常,或者判斷隊列長度,為0就不取)
queue.qsize()大小
queue.full()大小限制
2、後進先出queue.LifoQueue(maxsize=0)
3、存儲數據時設置優先級queue.ProrityQueue(maxsize=0)
    放數據的時候排序了,queue.put((1,"alex"))改變元祖裏的數字可以改順序
‘‘‘ ‘‘‘ 生產者消費者模型:利用隊列,生產者和消費者通過隊列關聯。例如web負載均衡 ‘‘‘ import queue import threading import time q = queue.Queue(maxsize=10) def Producer(name): # 不停的向隊列裏生產骨頭,當然可以有多個生產者 count = 1 while True: q.put("骨頭{0}".format(count)) print("生產了{0}個骨頭".format(count)) count += 1 time.sleep(
1) def Consumer(name): # 不停的從隊列裏取骨頭,當然可以有多個消費者 while True: print("{0}取到{1}並且吃了它".format(name, q.get())) time.sleep(0.5) p = threading.Thread(target=Producer, args=("alex",)) c1 = threading.Thread(target=Consumer, args=("張三",)) c2 = threading.Thread(target=Consumer, args=("李四"
,)) p.start() c1.start() c2.start()

生產者、消費者、隊列