zoukankan      html  css  js  c++  java
  • JoinableQueue队列实现消费之生产者模型

    #主进程等--->p1,p2,p3等---->c1,c2 #p1,p2,p3结束了,
    证明c1,c2肯定全都收完了p1,p2,p3发到队列的数据 
    #因而c1,c2也没有存在的价值了,不需要继续阻塞在进程中影响主进程了。应该随着主进程的结束而结束,所以设置成守护进程就可以了
    code
    from multiprocessing import Process,JoinableQueue
    import time,random,os
    def consumer(q):
        while True:
            res=q.get()
            time.sleep(random.randint(1,3))
            print('%s@@吃 %s' %(os.getpid(),res))
            q.task_done() #向q.join()发送一次信号,证明一个数据已经被取走了
    
    def producer(name,q):
        for i in range(10):
            time.sleep(random.randint(1,3))
            res='%s%s' %(name,i)
            q.put(res)
            print('%s生产了 %s' %(os.getpid(),res))
        q.join() #生产完毕,使用此方法进行阻塞,直到队列中所有项目均被处理。
    
    if __name__ == '__main__':
        q=JoinableQueue()
        #生产者们:即厨师们
        p1=Process(target=producer,args=('A',q))
        p2=Process(target=producer,args=('B',q))
        p3=Process(target=producer,args=('C',q))
    
        #消费者们:即吃货们
        c1=Process(target=consumer,args=(q,))
        c2=Process(target=consumer,args=(q,))
        c1.daemon=True
        c2.daemon=True
    
        #开始
        p_l=[p1,p2,p3,c1,c2]
        for p in p_l:
            p.start()
    
        p1.join()
        p2.join()
        p3.join()
        print('')

    Outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    58598生产了 C0
    58597生产了 B0
    58596生产了 A0
    58597生产了 B1
    58598生产了 C1
    58599@@吃 C0
    58600@@吃 B0
    58597生产了 B2
    58596生产了 A1
    58600@@吃 B1
    58597生产了 B3
    58598生产了 C2
    58599@@吃 A0
    58597生产了 B4
    58596生产了 A2
    58598生产了 C3
    58599@@吃 B2
    58600@@吃 C1
    58598生产了 C4
    58599@@吃 A1
    58600@@吃 B3
    58597生产了 B5
    58598生产了 C5
    58600@@吃 B4
    58599@@吃 C2
    58596生产了 A3
    58596生产了 A4
    58598生产了 C6
    58597生产了 B6
    58599@@吃 C3
    58596生产了 A5
    58600@@吃 A2
    58596生产了 A6
    58597生产了 B7
    58599@@吃 C4
    58600@@吃 B5
    58596生产了 A7
    58598生产了 C7
    58599@@吃 C5
    58597生产了 B8
    58600@@吃 A3
    58598生产了 C8
    58596生产了 A8
    58597生产了 B9
    58599@@吃 A4
    58600@@吃 C6
    58598生产了 C9
    58596生产了 A9
    58599@@吃 B6
    58600@@吃 A5
    58599@@吃 A6
    58600@@吃 B7
    58599@@吃 A7
    58600@@吃 C7
    58599@@吃 B8
    58600@@吃 A8
    58599@@吃 C8
    58600@@吃 B9
    58599@@吃 C9
    58600@@吃 A9
    主
    macname@MacdeMacBook-Pro py %
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    Opencv学习笔记(六)SURF学习笔记
    各种加解密算法比較
    DWZ使用笔记
    Android反编译-逆天的反编译
    C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
    Java 中队列的使用
    从svn下载项目后build path为灰色
    Java菜鸟学习笔记--面向对象篇(十六):Object类方法
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14193296.html
Copyright © 2011-2022 走看看