zoukankan      html  css  js  c++  java
  • 生产者消费模型

    """
    生产者消费者模型(celery消息队列)
    生产者:生产的数据(做包子的)
    消费者:处理数据的(吃包子的)
    生产者消费模型是用来平衡生产者与消费者之间的能力的,例如有时候消费者消费的速度太快,
    生产者来不及生产那么多的数据,或者有时候消费者的消费速度太慢.生产者生产的数据大量的累积在一起
    有了这个生产者消费模型之后,就可以平衡双方的能力了
    """
    from multiprocessing import Process,Queue,JoinableQueue
    import time
    import random


    def producer(name,food,q):
    # 产生,生产数据的,生产好数据之后就放到管道中去,其他某一个进程就可以取用了
    for i in range(3):
    data = '%s生产了%s%s'%(name,food,i)
    time.sleep(random.randint(1,3))
    q.put(data) ###放到管道q中去
    print(data)


    def consumer(name,q):
    while True:
    data = q.get()
    if data == None:break
    time.sleep(random.randint(1,3))
    print('%s吃了%s' % (name,data))
    q.task_done() # 已经从队里中拿到数据 并且处理完毕了


    if __name__ == '__main__':
    q = JoinableQueue()
    p = Process(target=producer,args=('大厨jason','肉包子',q))
    p1 = Process(target=producer,args=('配菜owen','馒头',q))
    c = Process(target=consumer,args=('吃货egon',q))
    c1 = Process(target=consumer,args=('坑货尚老师',q))
    p.start()
    p1.start()
    c.daemon = True ##守护进程
    c1.daemon = True ##守护进程
    c.start()
    c1.start()

    p.join()
    p1.join()
    q.join() # 等带队列中所有的数据都被取干净





  • 相关阅读:
    记一次笔试题
    模块模式浅析
    在windows上面实现ubuntu的三种方法
    移动端事件(五)—— 函数防抖和函数节流的封装
    一文分清强弱、动态静态类型语言
    为什么前端要学TypeScript
    OpenSSL SSL_read: Connection was reset, errno 10054
    浅悉http1.0 、http1.1和http2.0的区别
    上班一个月的总结
    从浅入深——理解JSONP的实现原理
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11312585.html
Copyright © 2011-2022 走看看