• 17.生产者与消费者模式,多对多的问题


    #多对多
    
    import threading
    import queue,time,random
    
    q = queue.Queue(maxsize=10)
    count = 1
    #生产者
    def producer(name):
        global count
        while True:
            if mutex.acquire():
    
                q.put('包子%d'%count)
                print('%s生产了包子:%d'%(name,count))
                count += 1
                time.sleep(random.random())
                mutex.release()
    
    def consumer(name):
        global count
        while True:
            # if mutex.acquire():
    
            print('[%s]取到了[%s],并且吃了它'%(name,q.get()))
            time.sleep(1)
                # mutex.release()
    
    if __name__ == "__main__":
    
        mutex = threading.Lock()
    
        p1 = threading.Thread(target=producer,args=('张大厨',))
        p2 = threading.Thread(target=producer,args=('李大厨',))
    
        a = threading.Thread(target=consumer,args=('A',))
        b = threading.Thread(target=consumer,args=('B',))
        c = threading.Thread(target=consumer,args=('C',))
        d = threading.Thread(target=consumer,args=('D',))
    
        p1.start()
        p2.start()
    
        a.start()
        b.start()
        c.start()
        d.start()
    
    #总结说明
    '''
    1.为什么要使用生产者和消费者模式
    在线程的世界里,生产者就是生产数据的线程,消费者就是消费数据的线程,
    在多线程开发当中,如果生产者处理的速度很快,而消费者处理的速度很慢,那么生产就必须等待消费者处理完成,
    才能继续生产数据,同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者,
    为了解决这个问题,所以才引入了~~~
    
    2.什么是生产者与消费模式
    生产者消费者模式通过一个容器来解决生产者与消费者的强耦合问题,生产者和消费者不直接通信,
    而是通过阻塞队列来进行通信,所以生产者生产完数据之后不用等待消费者处理,直接扔给队列,
    消费者不找生产者要数据,而是直接从队列中取,阻塞队列就相当于缓冲区,平衡消费者和生产者的处理能力,
    所以基于队列实现生产者和消费或者模型。
    '''
  • 相关阅读:
    [CF837B] Flag of Berland(乱写)
    [Uva12563] Jin Ge Jin Qu hao (完全背包,dp)
    [BZOJ2818] Gcd (数论,欧拉函数,线性筛)
    [CF777E] Hanoi Factory(贪心,栈)
    [CF777D] Cloud of Hashtags(贪心,二分)
    [CF777C] Alyona and Spreadsheet(dp)
    [BZOJ2440][中山市选2011]完全平方数(莫比乌斯函数,二分)
    [CF821C] Okabe and Boxes(模拟,栈)
    Codeforces Round #363 (Div. 2)->B. One Bomb
    Codeforces Round #363 (Div. 2)->A. Launch of Collider
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8627610.html
Copyright © 2020-2023  润新知