zoukankan      html  css  js  c++  java
  • (9)进程---JoinableQueue队列

    消费者模型-->存和取得过程

    和Queue队列区别:解决了Queue队列拿取完,程序阻塞不能自动关闭(依靠放入None来解决)的问题--->参见上个例子

    put 存入, get 获取

    q.task_done 通过队列其中一个数据被处理,JoinableQueue 默认会计数,执行一次task_done减少一次队列数

    JoinableQueue 里面有5个值,task_done减少一个,减到0 , 队列里面的值为空,然后发送消息给q,join,撤销阻塞,程序执行完毕!

    q.join() 添加阻塞,直到放入队列的所有值都被处理掉的时候,撤掉阻塞

    from multiprocessing import Process,JoinableQueue
    import random
    import time
    
    def consumer(q,name):
        while True:
            food = q.get()
            time.sleep(random.uniform(0.5,1))
            print("%s接受了 %s" % (name,food))
            q.task_done()
    
    def producer(q,name,food):
        for i in range(5):
            time.sleep(random.uniform(0.3,0.8))
            print("%s生产了 %s" % (name,food+str(i)))
            q.put(food+str(i))
    
    if __name__ == "__main__":
        jq = JoinableQueue()
        c1 = Process(target=consumer,args=(jq,"周金波"))
        c1.daemon = True
        c1.start()
        
        p1 = Process(target=producer,args= (jq,"张何伟","香吻"))
        p1.start()
        
        p1.join() # 生产者需要把所有数据放到队列当中
        #添加阻塞,直到放入队列的所有值都被处理掉的时候,撤掉阻塞
        # 通过task_done 表达处理掉的意思
        # join 和 task_done 需要配合使用;
        jq.join()
    View Code

     执行结果:

    张何伟生产了 香吻0
    张何伟生产了 香吻1
    周金波接受了 香吻0
    张何伟生产了 香吻2
    周金波接受了 香吻1
    张何伟生产了 香吻3
    张何伟生产了 香吻4
    周金波接受了 香吻2
    周金波接受了 香吻3
    周金波接受了 香吻4
    View Code

     

  • 相关阅读:
    Linux显示2015年日历表
    Linux显示系统日期
    Dialogs 对话框
    grid 属性
    VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 嵌入清单
    Perl Tk grid 布局
    Perl Tk pack布局示例
    Perl Tk grid布局管理器
    Perl DBI模块
    输入文本框模型
  • 原文地址:https://www.cnblogs.com/lyj910313/p/10787271.html
Copyright © 2011-2022 走看看