您的位置:澳门新葡8455最新网站 > 编程教学 > Python queue队列

Python queue队列

发布时间:2019-11-10 14:58编辑:编程教学浏览(65)

    作用:

       解耦:使程序直接促成松耦合,改进贰个函数,不会有串联关系。

       进步管理功能:FIFO = 现进先出,LIFO = 后入先出。

     

    队列:

      队列能够现身的派多个线程,对排列的线程管理,并切每一种须求管理线程只须要将央浼的数量归入队列容器的内存中,线程无需翘首以待,当排列达成管理完数据后,线程在限时来取多少就能够。央求数据的线程只与这么些行列容器存在关联,管理数据的线程down掉不会耳熏目染到央浼数据的线程,队列会派给任何线程管理那分多少,它落成了然耦,进步功用。队列内会有一个有种种的器皿,列表与那一个容器是有分别的,列表中数量即使是排列的,但多少被取走后还大概会保留,而队列中这些容器的数码被取后将不会保留。当必需在五个线程之间安全地交流消息时,队列在线程编程中非常有用。

     

     

    参数介绍:

    # 先入先出 maxsize 可设置大小,设置block=False抛异常
    class queue.Queue(maxsize=0)  
    
     # 后进先出 
    class queue.LifoQueue(maxsize=0)
    
    # 存储数据时可设置优先级的队列
    # 优先级设置数越小等级越高
    class queue.PriorityQueue(maxsize=0) 
    
    # 放入数据
    Queue.put(item, block=True, timeout=None)
    
    # 取出数据 #没有数据将会等待
    Queue.get(block=True, timeout=None)
    
    # 如果1秒后没取到数据就退出
    Queue.get(timeout = 1)
    
    
    # 取数据,如果没数据抛queue.Empty异常
    Queue.get_nowait()
    
    # 查看队列大小
    Queue.qsize()
    
    # 返回True,如果空
    Queue.empty() #return True if empty  
    
    # 设置队列大小
    Queue.full() 
    
    # 后续调用告诉队列,任务的处理是完整的。
    Queue.task_done()
    

     

    劳动者花费者模型:

    import threading,time
    import queue
    
    # 最多存入10个
    q = queue.Queue(maxsize=10)
    
    def producer(name):
        count = 1
    
        while True:
    
               # 生产一块骨头
                q.put("骨头 %s" % count )
                print("生产了骨头",count)
                count +=1
                time.sleep(0.3)
    
    def consumer(name):
        while True:
            print("%s 取到[%s] 并且吃了它" %(name, q.get()))
            time.sleep(1)
    
           # 告知这个任务执行完了
            q.task_done() 
    
    # 生成线程
    p = threading.Thread(target=producer,args=("德国骨科",))
    c = threading.Thread(target=consumer,args=("陈狗二",))
    d = threading.Thread(target=consumer,args=("吕特黑",))
    
    # 执行线程
    p.start()
    c.start()
    d.start()
    

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:Python queue队列

    关键词: