生產消費者模型程式碼示例
阿新 • • 發佈:2018-12-15
import time import random from multiprocessing import Process,Queue def producer(q,name,food): for i in range(4): time.sleep(random.random()) f = "{}生產出一個{}".format(name,food) print(f) q.put(f) def consumer(q,name): while True: food = q.get()View Codeif food is None: print("{}獲取空,退出".format(name)) break time.sleep(random.random()) print("{}消費了一個{}".format(name,food)) if __name__ == '__main__': q = Queue(10) p1 = Process(target=producer,args=(q,"生產者1號","包子")) p2 = Process(target=producer,args=(q,"生產者2號","饅頭")) c1 = Process(target=consumer,args=(q,"消費者1號")) c2 = Process(target=consumer,args=(q,"消費者2號")) c3 = Process(target=consumer,args=(q,"消費者3號")) p1.start() p2.start() c1.start() c2.start() c3.start() p1.join() p2.join() q.put(None) q.put(None) q.put(None)
import time import random from multiprocessing import Process,JoinableQueue def producer(q,name,food): for i in range(4): time.sleep(random.random()) f = "{}生產出一個{}".format(name,food) print(f) q.put(f) q.join() #生產週期變長,要等到所生產的資料被處理完,這個子程序才結束 def consumer(q,name): while True: food = q.get() time.sleep(random.random()) print("{}消費了一個{}".format(name,food)) q.task_done() if __name__ == '__main__': q = JoinableQueue(10) p1 = Process(target=producer,args=(q,"生產者1號","包子")) p2 = Process(target=producer,args=(q,"生產者2號","饅頭")) c1 = Process(target=consumer,args=(q,"消費者1號")) c2 = Process(target=consumer,args=(q,"消費者2號")) c3 = Process(target=consumer,args=(q,"消費者3號")) p1.start() p2.start() c1.daemon = True #設定為守護程序,主程序中的程式碼執行完畢之後,該守護程序自動結束 c2.daemon = True c3.daemon = True c1.start() c2.start() c3.start() p1.join() #感知一個程序的結束 p2.join()View Code