生产者消费者模型

生产者消费者模型

'''
生产者:制造/生产数据
消费者:处理/消费数据
例子:做包子,卖包子
    供大于求
    供不应求
    供需问题
生产者消费者模型能解决消费者将队列中的值取完后,会自动结束进程,不会在原地等待
JoinableQueue能够被等待的队列
'''
from multiprocessing import Process, Queue, JoinableQueue
import random
import time


def producer(name, food, q):
    for i in range(10):
        data = '%s生产了%s %s'%(name, food, i)
        time.sleep(random.random())
        q.put(data)
        print(data)


def consumer(name, q):
    while True:
        data = q.get()
        # if data == None:break
        print('%s吃了%s'%(name, data))
        time.sleep(random.random())
        q.task_done()


if __name__ == '__main__':
    q = JoinableQueue()
    p = Process(target=producer, args=('jason', '', q))
    p1 = Process(target=producer, args=('egon', '馒头', q))
    c = Process(target=consumer, args=('tank', q))
    c1 = Process(target=consumer, args=('jerry', q))
    p.start()
    p1.start()
    c.daemon = True
    c1.daemon = True
    c.start()
    c1.start()
    p.join()
    p1.join()  # 生产者确确实实生产结束
    q.join()  # 等待队列中的值全部取完
    print('zhu')


'''
q.task_done()和q.join()是放在一起使用的
在JoinableQueue内部中有个机制,在队列中放入一个值,就会+1,task_done之后就会减一,直到真正取完时
'''
原文地址:https://www.cnblogs.com/asdaa/p/11343044.html