• queue模块


    先入先出、先入后出;按优先级

    #!/usr/bin/env python
    # Author:Zhangmingda
    import  queue
    
    q = queue.Queue() #先入先出
    q.put('A')
    q.put('B')
    q.put('C')
    print(q.get())
    print(q.get())
    print(q.get())
    queue先入先出
    #!/usr/bin/env python
    # Author:Zhangmingda
    import  queue
    
    q = queue.LifoQueue() #先入后出
    q.put('A')
    q.put('B')
    q.put('C')
    print(q.get())
    print(q.get())
    print(q.get())
    queue先入后出
    #!/usr/bin/env python
    # Author:Zhangmingda
    import  queue
    
    q = queue.PriorityQueue() #优先级策略put内容为元组,第一个为优先级代码,必须全部为数字或者字母
    q.put((3,'zhangsan'))
    q.put((5,'lisi'))
    q.put((1,'wangwu'))
    print(q.get())
    print(q.get())
    print(q.get())
    设置优先级数字越小优先级越高

     生产者消费者模型

    #!/usr/bin/env python
    # Author:Zhangmingda
    import threading,time,queue
    
    q = queue.Queue(maxsize=10) #创建一个消息队列实例,限制最大容纳的消息总数最多10个
    
    '''生产者函数'''
    def producer(name):
        count =0 #消息开始编号
        while True:
            q.put('骨头%s'% count)
            print('%s生产了第%s个骨头'%(name,count),'当前队列总数:%s'% q.qsize())
            count += 1 #区别每个生产的消息
            time.sleep(0.5) #控制生产消息的频率
    '''消费者函数'''
    def consumer(name):#
        while True:
            print('%s 吃了:%s'%(name,q.get()))
            time.sleep(1) #控制消费者消费消息的频率
    
    p = threading.Thread(target=producer,args=('Zhangmingda',))
    c = threading.Thread(target=consumer,args=('张阳',))
    p.start()
    c.start()
    生产者消费者模型
    C:UsersAdministratorDesktopPython3_studyvenvScriptspython.exe C:/Users/Administrator/Desktop/Python3_study/day9/生产者消费者模型.py
    Zhangmingda生产了第0个骨头 当前队列总数:1
    张阳 吃了:骨头0
    Zhangmingda生产了第1个骨头 当前队列总数:1
    Zhangmingda生产了第2个骨头 当前队列总数:2
    张阳 吃了:骨头1
    Zhangmingda生产了第3个骨头 当前队列总数:2
    张阳 吃了:骨头2
    Zhangmingda生产了第4个骨头 当前队列总数:2
    Zhangmingda生产了第5个骨头 当前队列总数:3
    张阳 吃了:骨头3
    Zhangmingda生产了第6个骨头 当前队列总数:3
    Zhangmingda生产了第7个骨头 当前队列总数:4
    张阳 吃了:骨头4
    Zhangmingda生产了第8个骨头 当前队列总数:4
    Zhangmingda生产了第9个骨头 当前队列总数:5
    张阳 吃了:骨头5
    Zhangmingda生产了第10个骨头 当前队列总数:5
    Zhangmingda生产了第11个骨头 当前队列总数:6
    张阳 吃了:骨头6
    Zhangmingda生产了第12个骨头 当前队列总数:6
    Zhangmingda生产了第13个骨头 当前队列总数:7
    张阳 吃了:骨头7
    Zhangmingda生产了第14个骨头 当前队列总数:7
    Zhangmingda生产了第15个骨头 当前队列总数:8
    张阳 吃了:骨头8
    Zhangmingda生产了第16个骨头 当前队列总数:8
    Zhangmingda生产了第17个骨头 当前队列总数:9
    张阳 吃了:骨头9
    Zhangmingda生产了第18个骨头 当前队列总数:9
    Zhangmingda生产了第19个骨头 当前队列总数:10
    张阳 吃了:骨头10
    Zhangmingda生产了第20个骨头 当前队列总数:10
    Zhangmingda生产了第21个骨头 当前队列总数:10
    张阳 吃了:骨头11
    Zhangmingda生产了第22个骨头 当前队列总数:10
    张阳 吃了:骨头12
    Zhangmingda生产了第23个骨头 当前队列总数:10
    张阳 吃了:骨头13
    Zhangmingda生产了第24个骨头 当前队列总数:10
    张阳 吃了:骨头14
    Zhangmingda生产了第25个骨头 当前队列总数:10
    张阳 吃了:骨头15
    Zhangmingda生产了第26个骨头 当前队列总数:10
    张阳 吃了:骨头16
    执行结果

    执行结果说明:当消息队列不满的时候,就会while循环去生产消息。满了的时候就等着被消费掉(此时生产消息的进程卡主等待状态)再生产。

  • 相关阅读:
    strace命令的使用
    部署软件RDMA的步骤
    centos7上安装iptables
    在Linux中的.iso文件的处理方法
    centos7关闭自动锁屏
    SSH配置优化和慢的解决方法
    sort排序和uniq统计命令
    ansible的携带密码访问
    fabric入门
    防火墙设置本机端口转发
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/9251615.html
Copyright © 2020-2023  润新知