zoukankan      html  css  js  c++  java
  • queue队列模块

    1 基本理解

      Queue是一个在内存中,元素带顺序的容器。

      解耦:数据待处理线程把数据交给队列,不需要关心处理者是谁。处理者从队列中拿数据处理,不和待处理线程接触。

      效率:数据待处理线程把数据交给队列,然后继续自己的工作。处理者可以多线程并发处理。

      和列表的区别:队列中的数据取出就会消失。列表不会。

      队列中的元素,处理顺序有三种,先入先出,后入先出,优先级。

    2 class queue.Queue() 

    first in first out

    import  queue
    
    q = queue.Queue()
    q.put('d1')
    q.put('d2')
    print(q.qsize())
    q.get()
    q.get()
    q.get(block=True,timeout=4)
    >>
    2
        raise Empty
    queue.Empty
    #创建队列实例,put两个数据,获取列队长度,get数据。
    #get方法默认阻塞,超时为None,qsize为0时持续阻塞。
    #get不到数据,超时后,抛出一个队列空的异常
    import  queue
    q = queue.Queue(maxsize=5)
    q.put('d1',timeout=4)
    q.put('d1',timeout=4)
    q.put('d1',timeout=4)
    q.put('d1',timeout=4)
    q.put('d1',timeout=4)
    
    q.put('d1',timeout=4)
    >>
        raise Full
    queue.Full
    #创建队列实例时设定了size,然后put方法中设定了timeout,size满了,put超时,就抛出队列满的异常
    

      

    3 class queue.LifoQueue

    last in first out

    import  queue
    
    q = queue.LifoQueue()
    q.put('d1')
    q.put('d2')
    print(q.qsize())
    print(q.get())
    print(q.get())
    >>
    2
    d2
    d1
    

      

    4 queue.PriorityQueue()

    。。。

    5 生产消费者模型

    import  queue,threading,time
    
    q = queue.Queue(maxsize=100)
    
    def producer(name,speed):
        count = 0
        while True:
            count += 1
            q.put('骨头%s' %(count))
            print('33[42m现在的骨头数 %s,生产者为%s33[0m' %(q.qsize(),name))
            time.sleep(speed)
    
    def customer(name,speed):
        while True:
            print('%s 消费 %s,正在吃...' %(name,q.get()))
            time.sleep(speed)
    
    jabbok = threading.Thread(target=producer,args=('jabbok',2.5,))
    eric = threading.Thread(target=producer,args=('eric',1.5,))
    vici = threading.Thread(target=customer,args=('vici',2,))
    lee = threading.Thread(target=customer,args=('lee',3,))
    jabbok.start()
    eric.start()
    vici.start()
    lee.start()
    #jabbok和eric为生产者,jabbok每2.5秒生产一块骨头,eric每1.5秒生产一块骨头
    #vici和lee为消费者,vici每2s吃一块骨头,lee每3s吃一块骨头
    #生产者生产的骨头放入队列,队列最多放100块骨头。消费者从队列买骨头。实现解耦。
    

      

  • 相关阅读:
    PAT(B) 1037 在霍格沃茨找零钱(Java)
    PAT(B) 1043 输出PATest(Java)统计
    PAT(B) 1063 计算谱半径(Java)
    绘制虚线
    contentMode
    数字签名是什么
    动态设置 button的 name 的话 闪动的问题 解决
    setValuesForKeysWithDictionary 的用法
    获得 当前时间
    iOS 键盘类型
  • 原文地址:https://www.cnblogs.com/jabbok/p/9104935.html
Copyright © 2011-2022 走看看