zoukankan      html  css  js  c++  java
  • Python--day38--JoinableQueue解决生产者消费者模型

    #############################

    # 在消费者这一端:
        #每次获取一个数据
        #处理一个数据
        #发送一个记号:标志一个数据被处理成功

    #在生产者这一端:
      #每一次生成一个数据
      #且每一次生产的数据都放在队列中
      #在队列中刻上一个记号
      #当生产者全部生产完毕之后,
      #join信号:已经停止生产数据了
        #且要等待之前被刻上的记号都被消费完
        #当数据都被处理完时,join阻塞结束

    #consumer 中把所有的任务消耗完
    #producer端的join感知到,停止阻塞
    #所有的producer进程结束
    #主进程中的p.join结束
    #主进程中代码结束
    #守护进程(消费者的进程)结束

    生产者消费者模型.py

     1 import random
     2 import time
     3 from multiprocessing import JoinableQueue, Process
     4 
     5 def consumer(q,name):
     6     while True:
     7         food = q.get()
     8         if food is None:
     9             print('%s获取到了一个空',name)
    10             break
    11         print('33[31m%s消费了%s33[0m' %(name,food))
    12         time.sleep(random.randint(1,3))
    13         q.task_done()   #count -1
    14 
    15 def producer(name,food,q):
    16     for i in range(4):
    17         time.sleep(random.randint(1,3))
    18         f = '%s生产了%s%s'%(name,food,i)
    19         print(f)
    20         q.put(f)    #0 1 ...20
    21     q.join()    #阻塞 直到一个队列中的数据全部被执行完毕
    22 
    23 
    24 if __name__ == '__main__':
    25     q = JoinableQueue(20)
    26     p1 = Process(target=producer,args=('Egon','包子',q))
    27     p2 = Process(target=producer,args=('wusir','泔水',q))
    28     c1 = Process(target=consumer,args=(q,'alex'))
    29     c2 = Process(target=consumer,args=(q,'jinboss'))
    30     p1.start()
    31     p2.start()
    32     c1.daemon = True    #设置为守护进程 主进程中的代码执行完毕之后,子进程自动结束
    33     c2.daemon = True
    34     c1.start()
    35     c2.start()
    36     p1.join()
    37     p2.join()   #join()感知一个进程的结束
    38     q.put(None)
  • 相关阅读:
    hystrix(3) 熔断器
    hystrix(2) metrics
    hystrix(1) 概述
    ribbon源码(6) Server
    ribbon源码之客户端
    ribbon源码(4) 载均衡算法
    java虚拟机5 字节码
    spring mvc(5) HandlerAdapter
    spring mvc(4) HandlerMapping
    spring mvc(3) DispatcherServlet
  • 原文地址:https://www.cnblogs.com/xudj/p/10327256.html
Copyright © 2011-2022 走看看