隊列 先進先出

1 from multiprocessing import Queue 2 q = Queue(5) #隊列的大小 3 q.put(1) #放入內容 4 q.put(2) #放入內容 5 q.put(3) #放入內容 6 q.put(4) #放入內容 7 q.put(5) #放入內容 8 print(q.full()) #你的隊列是否滿了 9 print(q.get()) #取出隊列中目前排在最前面的數 10 q.empty() #判斷隊列是否為空

1 from multiprocessing import Queue,Process 2 def produce(q): 3 q.put('hello') 4 5 def consume(q): 6 print(q.get()) 7 8 if __name__ == '__main__': 9 q = Queue() 10 p = Process(target=produce,args=(q,)) 11 p.start() 12 c = Process(target=consume, args=(q,)) 13 c.start()
生產者消費者模型,解決供需不平和的問題

1 # 隊列 2 # 生產者消費者模型 3 4 # 生產者 進程 5 # 消費者 進程 6 import time 7 import random 8 from multiprocessing import Process,Queue 9 def consumer(q,name): 10 while True: 11 food = q.get() 12 if food is None: 13 print('%s獲取到了一個空'%name) 14 break 15 print('\033[31m%s消費了%s\033[0m' % (name,food)) 16 time.sleep(random.randint(1,3)) 17 18 def producer(name,food,q): 19 for i in range(4): 20 time.sleep(random.randint(1,3)) 21 f = '%s生產了%s%s'%(name,food,i) 22 print(f) 23 q.put(f) 24 25 if __name__ == '__main__': 26 q = Queue(20) 27 p1 = Process(target=producer,args=('Egon','包子',q)) 28 p2 = Process(target=producer, args=('wusir','泔水', q)) 29 c1 = Process(target=consumer, args=(q,'alex')) 30 c2 = Process(target=consumer, args=(q,'jinboss')) 31 p1.start() 32 p2.start() 33 c1.start() 34 c2.start() 35 p1.join() 36 p2.join() 37 q.put(None) 38 q.put(None)
使用joinableQueue解決生產消費者問題

1 import time 2 import random 3 from multiprocessing import Process,JoinableQueue 4 def consumer(q,name): 5 while True: 6 food = q.get() 7 print('\033[31m%s消費了%s\033[0m' % (name,food)) 8 time.sleep(random.randint(1,3)) 9 q.task_done() # count - 1 10 11 def producer(name,food,q): 12 for i in range(4): 13 time.sleep(random.randint(1,3)) 14 f = '%s生產了%s%s'%(name,food,i) 15 print(f) 16 q.put(f) 17 q.join() # 阻塞 直到一個隊列中的所有數據 全部被處理完畢 18 19 if __name__ == '__main__': 20 q = JoinableQueue(20) 21 p1 = Process(target=producer,args=('Egon','包子',q)) 22 p2 = Process(target=producer, args=('wusir','泔水', q)) 23 c1 = Process(target=consumer, args=(q,'alex')) 24 c2 = Process(target=consumer, args=(q,'jinboss')) 25 p1.start() 26 p2.start() 27 c1.daemon = True # 設置為守護進程 主進程中的代碼執行完畢之后,子進程自動結束 28 c2.daemon = True 29 c1.start() 30 c2.start() 31 p1.join() 32 p2.join() # 感知一個進程的結束 33 34 # 在消費者這一端: 35 # 每次獲取一個數據 36 # 處理一個數據 37 # 發送一個記號 : 標志一個數據被處理成功 38 39 # 在生產者這一端: 40 # 每一次生產一個數據, 41 # 且每一次生產的數據都放在隊列中 42 # 在隊列中刻上一個記號 43 # 當生產者全部生產完畢之后, 44 # join信號 : 已經停止生產數據了 45 # 且要等待之前被刻上的記號都被消費完 46 # 當數據都被處理完時,join阻塞結束 47 48 # consumer 中把所有的任務消耗完 49 # producer 端 的 join感知到,停止阻塞 50 # 所有的producer進程結束 51 # 主進程中的p.join結束 52 # 主進程中代碼結束 53 # 守護進程(消費者的進程)結束