101-python-进程-JoinableQueue( 生产者消费者模型例子 )

import time
import random
from multiprocessing import Process,JoinableQueue

"""
 # 进程结束步骤 :
    1. 当主进程执行完毕后 会堵塞在 q.join()
    2. 当 q.join() 阻塞结束后 主进程也就结束了
    3. 因为 守护进程的原因,主进程结束后,子进程也会跟着结束
"""

def consumer(name,q):
    while True:
        food = q.get()
        if food is None:
            print('zzz..')
            break
        print('\033[31m%s 消费了 %s\033[0m'%(name,food))
        time.sleep(random.randint(1,2))
        q.task_done()

def producer(name,food,q):
    for i in range(3):
        time.sleep(random.randint(1,2))
        a = '%s上产了%s %s次'%(name,food,i)
        print(a)
        q.put(i)
    q.join()    # 阻塞 直到一个队列中的所有数据 全部被处理完毕

if __name__ == '__main__':
    q = JoinableQueue()
    p1 = Process(target=producer,args=('q','apple',q))   # 生产
    p2 = Process(target=producer,args=('qq','pear',q))   # 生产
    c1 = Process(target=consumer,args=('w',q))  # 消费
    c2 = Process(target=consumer, args=('e', q))    # 消费

    p1.start()
    p2.start()
    c1.daemon = True    # 进程守护: 当主进程代码执行完毕后 子进程也会关闭
    c2.daemon = True

    c1.start()
    c2.start()

    p1.join()
    p2.join()

  

posted @ 2018-11-20 11:57  _Q  阅读(121)  评论(0)    收藏  举报