zoukankan      html  css  js  c++  java
  • 单生产者进程和单消费者进程

    
    '''
    初试生产者消费者模型代码
    分析:
    对象含有生产者、队列、消费者
    Queue队列模块,不适合传大文件,通常传一些消息。
    
    
    '''
    '''单生产者进程和单消费者进程'''
    #导入模块
    from  multiprocessing import Process,Queue
    
    #生产者
    def producers(q,name,food):
        # 开始生产10个包子
        for i in range(10):
            print(f'{name}生产了{food}三丰牌{i}')
    
            res=f'{food}{i}'            #包子0-9当时卡了没有默写出来
            #把生产者生产的一大堆包子打包成一个变量,然后直接put到队列的管子里(q.put(res)),等待消费者去get
    
            #创建队列
            q.put(res)
        #队列结束标识
        # q.put('我生产完毕了')
        q.put(None)
    #消费者
    def consumers(q,name):
        while True:
            # 把包子接收过来,创建接收队列
            recive = q.get()
            # 然后接收队列进行判断,如果recive是'我生产完毕了'的话,消费者就停止再继续吃包子了
            # if recive == '我生产完毕了':
            if recive is None:
                break
    
            print(f'{name}吃掉了{recive}')
    
    if __name__ == '__main__':
        #创建队列对象
        q=Queue()
        '''下面两行代码最终会报错,调用的是函数不是进程,报错内容:
            'NoneType' object has no attribute 'start'  空类型对象没有start 属性'''
        # p1=producers(q,'张三丰','狗不理包子')
        # c1=consumers(q,'luzhaoshan')
    
        p1 = Process(target=producers,args=(q,'张三丰','狗不理包子'))     #此人生产者
        c1 = Process(target=consumers,args=(q,'luzhaoshan'))             #此人消费者
        p1.start()
        c1.start()
    
    '''
    
    
    
    
  • 相关阅读:
    xml DTD中的ELEMENT和ATTLIST
    xml CDATA
    xml 及其语法
    java 多态的好处
    libusb-win32 在visual studio2008中成功编译回忆录
    【转帖】C# DllImport 系统调用使用详解 托管代码的介绍 EntryPoint的使用
    【转帖】.Net中C#的DllImport的用法
    .net 中的DllImport
    离线安装谷歌扩展
    排序算法哪家强?
  • 原文地址:https://www.cnblogs.com/ludundun/p/11529657.html
Copyright © 2011-2022 走看看