• 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()
    
  • 相关阅读:
    (转)c++ libcurl一步一步问题解决
    (转载)C++ 用libcurl库进行http通讯网络编程
    (官网)虚幻3--UnrealScript 游戏流程
    (官网)虚幻3--虚幻引擎3命令行参数
    (官网)虚幻3--Scaleform 技术指南
    Android笔记之PenddingIntent使用
    java笔记之字符串截取操作
    java笔记之InputStream转换成String
    java笔记之同一方法的多种传参形式
    Android笔记之调用Resource资源
  • 原文地址:https://www.cnblogs.com/guqing/p/6440723.html
Copyright © 2020-2023  润新知