生产者消费者模型

from multiprocessing import Process,Queue
import time,random

def consumer(q,name):
    while True:
        f = q.get()
        if f is None:
            print('%s获得了一个空'%name)
            break
        print('\033[31m%s消费了%s\033[0m'%(name,f))
        time.sleep(random.randint(1,3))

def producer(name,food,q):
    for i in range(4):
        time.sleep(random.randint(1,3))
        f = '%s生产了%s%s'%(name,food,i)
        print(f)
        q.put(f)

if __name__ == '__main__':
    q = Queue(20)
    p1 = Process(target=producer,args=('Egon','包子',q))
    p2 = Process(target=producer,args=('wusir','泔水',q))
    c1 = Process(target=consumer,args=(q,'jinboss'))
    c2 = Process(target=consumer,args=(q,'alex'))
    p1.start()
    p2.start()
    c1.start()
    c2.start()
    p1.join()
    p2.join()
    q.put(None)
    q.put(None)

 JoinableQueue

from multiprocessing import Process
from multiprocessing import JoinableQueue
import time,random

def consumer(q,name):
    while True:
        f = q.get()

        print('\033[31m%s消费了%s\033[0m'%(name,f))
        time.sleep(random.randint(1,3))
        q.task_done()

def producer(name,food,q):
    for i in range(4):
        time.sleep(random.randint(1,3))
        f = '%s生产了%s%s'%(name,food,i)
        print(f)
        q.put(f)
    q.join()

if __name__ == '__main__':
    q = JoinableQueue(20)
    p1 = Process(target=producer,args=('Egon','包子',q))
    p2 = Process(target=producer,args=('wusir','泔水',q))
    c1 = Process(target=consumer,args=(q,'jinboss'))
    c2 = Process(target=consumer,args=(q,'alex'))
    p1.start()
    p2.start()
    c1.daemon = True
    c2.daemon = True
    c1.start()
    c2.start()
    p1.join()
    p2.join()

 

posted @ 2018-09-08 17:11  Woowo  阅读(110)  评论(0编辑  收藏  举报