1. 程式人生 > >生產消費者模型程式碼示例

生產消費者模型程式碼示例

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()
        
if 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)
View Code
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