zoukankan      html  css  js  c++  java
  • python--队列、生产者消费者模型

    队列:

    import queue
    
    q = queue.Queue()   #先入先出
    print(q.empty())  #判断是否为空,空返回True
    q.put("d1")
    q.put("d2")
    q.put("d3")
    print(q.full()) #判断是否满,满返回True
    print(q.get())  #d1
    print(q.get())  #d2
    print(q.get())  #d3
    print(q.get(timeout=1))  #阻塞 可以使用q.get(timeout = 1)设置超时来解决阻塞问题,抛出queue.Empty异常
    print(q.get_nowait()) #接上一行的例子,还可以设置不要等待,没有数据即刻抛出异常
    print(q.qsize()) #或者使用if判断qsize是否等于0
    print(q.get(block=False))   #block参数False也可以解决程序阻塞问题
    
    
    
    #设置具有长度限制的队列
    q = queue.Queue(maxsize=3)  #长度为3
    q.put(1)
    q.put(2)
    q.put(3)
    q.put(4, block=False) #这里程序又阻塞了,所以可以使用block,timeout参数解决阻塞问题,异常queue.Full
    
    q = queue.PriorityQueue() #设置优先级队列,数字小的优先级高
    q.put((1, "King"))
    q.put((-1, "Jeson"))
    q.put((10, "Tim"))
    q.put((5, "Mike"))
    
    
    # q = queue.LifoQueue() #设置后入先出队列
    # q.put(1)
    # q.put(2)
    # q.put(3)
    # print(q.get())
    # print(q.get())
    # print(q.get())
    

    生产者消费者模型:

    import threading
    import time
    import queue
    
    
    q = queue.Queue(maxsize=10)
    
    
    def producer(name):  #生产者
        count = 1
        while True:
            q.put("骨头%s" % count)
            print("生产了骨头", count)
            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=("Tim",))
    c1 = threading.Thread(target=consumer, args=("King",))
    c2 = threading.Thread(target=consumer, args=("Wang",))
    
    p.start()
    c1.start()
    c2.start()
    
  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/guqing/p/6440723.html
Copyright © 2011-2022 走看看