• 生产者消费者模型


    #!/usr/bin/env python
    # -*-coding:utf-8 -*-
    
    '''
    生产者消费者模型:
    
    为什么要使用生产者和消费者模式:
    在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者的处理速度很快,
    而消费者处理慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同理反过来也不行,因此引进这种模式。
    
    什么是生产消费者模式:
    生产者消费模式是通过一个容器来解决生产者和消费者的解耦问题。两者之间不直接通讯,而通过阻塞队列进行通讯,
    队列就相当于一个缓冲区,平衡了两者的处理能力。
    '''
    
    import time, random
    import queue, threading
    
    q = queue.Queue()  # 全局q
    
    
    def Producer(name):
        count = 0
        while count < 10:
            print("making........")
            time.sleep(random.randrange(3))
            q.put(count)
            print('Producer %s has produced %s baozi..' % (name, count))
            count += 1
            q.task_done()                 # task_done()给队列发信息,队列操作完成(.put())
            # q.join()
            print("ok......")
    
    
    def Consumer(name):
        count = 0
        while count < 9:
            time.sleep(random.randrange(4))
            if not q.empty():
                # print("waiting.....")
                q.join()                       # 与.task_done()对应
                data = q.get()
                print("eating....")
                # time.sleep(4)
    
                # q.task_done()
                # print(data)
                print('33[32;1mConsumer %s has eat %s baozi...33[0m' % (name, data))
            else:
                print("-----no baozi anymore----")
                count += 1
    
    
    p1 = threading.Thread(target=Producer, args=('A君',))
    c1 = threading.Thread(target=Consumer, args=('B君',))
    # c2 = threading.Thread(target=Consumer, args=('C君',))
    # c3 = threading.Thread(target=Consumer, args=('D君',))
    
    p1.start()
    c1.start()
    # c2.start()
    # c3.start()
  • 相关阅读:
    C#将List<T>转化为DataTable
    SqlServer常用内置函数
    C#索引器
    验证Textbox的字符长度
    WM消息对应的Message消息中的Lparam和WParam
    对窗体操作的WM消息
    DllImport使用
    C#获取当前路径的七种方法
    注册ActiveX控件
    [转]VS2010中水晶报表安装应用及实例
  • 原文地址:https://www.cnblogs.com/maxiaonong/p/9538427.html
Copyright © 2020-2023  润新知