并发编程 之 生产者消费者模型

1 什么是生产者消费者模型
生产者:比喻的是程序中负责产生数据的任务
消费者:比喻的是程序中负责处理数据的任务

生产者->共享的介质(队列)<-消费者

2 为什么用
实现了生产者与消费者的解耦和,生产者能够不停地生产,消费者也能够不停地消费
从而平衡了生产者的生产能力与消费者消费能力,提高了程序总体运行的效率

何时用?
当咱们的程序中存在明显的两类任务,一类负责产生数据,另一类负责处理数据
此时就应该考虑使用生产者消费者模型来提高程序的效率

from multiprocessing import JoinableQueue,Processimport timeimport osimport randomdef producer(name,food,q):    for i in range(3):        res='%s%s' %(food,i)        time.sleep(random.randint(1,3))        # 往队列里丢        q.put(res)        print('\033[45m%s 生产了 %s\033[0m' %(name,res))    # q.put(None)def consumer(name,q):    while True:        #从队列里取走        res=q.get()        if res is None:break        time.sleep(random.randint(1,3))        print('\033[46m%s 吃了 %s\033[0m' %(name,res))        q.task_done()if __name__ == '__main__':    q=JoinableQueue()    # 生产者们    p1=Process(target=producer,args=('egon','包子',q,))    p2=Process(target=producer,args=('杨军','泔水',q,))    p3=Process(target=producer,args=('猴老师','翔',q,))    # 消费者们    c1=Process(target=consumer,args=('Alex',q,))    c2=Process(target=consumer,args=('wupeiqidsb',q,))    c1.daemon=True    c2.daemon=True    p1.start()    p2.start()    p3.start()    c1.start()    c2.start()    p1.join()    p2.join()    p3.join()    q.join() #等待队列被取干净    # q.join() 结束意味着    # 主进程的代码运行完毕--->(生产者运行完毕)+队列中的数据也被取干净了->消费者没有存在的意义    # print('主')
相关文章
相关标签/搜索