美文网首页
python queue

python queue

作者: 墨流引 | 来源:发表于2020-04-15 11:56 被阅读0次

    Queue

    queue 模块实现多生产者,多消费者队列。当信息必须安全的在多线程之间交换时,它在线程编程中是特别有用的。此模块中的 Queue 类实现了所有锁定需求的语义。它依赖于Python支持的线程可用性;请参阅 threading 模块。

    模块实现了三种类型的队列,它们的区别仅仅是条目取回的顺序。在 FIFO 队列中,先添加的任务先取回。在LIFO队列中,最近被添加的条目先取回(操作类似一个堆栈)。优先级队列中,条目将保持排序( 使用 heapq 模块 ) 并且最小值的条目第一个返回。

    在内部,这三个类型的队列使用锁来临时阻塞竞争线程;然而,它们并未被设计用于线程的重入性处理。
    此外,模块实现了一个 "简单的" FIFO队列类型, SimpleQueue ,这个特殊实现为小功能在交换中提供额外的保障。

    FIFO(first-in,first-out)

    import queue
    fifo_queue = queue.Queue(maxsize=0)
    # maxsize是个整数,用于设置可以放入队列中的项目数的上限。
    # 当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。
    # 如果 maxsize 小于等于零,队列尺寸为无限大。
    

    LIFO(last-in,first-out)

    lifo_queue = queue.LifoQueue(maxsize=0)
    # maxsize是个整数,用于设置可以放入队列中的项目数的上限。
    # 当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。
    # 如果 maxsize 小于等于零,队列尺寸为无限大。
    

    Queue对象

    队列对象 (Queue, LifoQueue, 或者 PriorityQueue) 提供下列描述的公共方法。

    from queue import Queue
    
    Queue.qsize()
    # 返回队列的大致大小。
    Queue.empty()
    # 如果队列为空,返回 True ,否则返回 False 。
    Queue.full()
    # 如果队列是满的返回 True ,否则返回 False 。
    Queue.put(item, block=True, timeout=None)
    # 将 item 放入队列。
    # 如果可选参数 block 是 true 并且 timeout是None (默认),则在必要时阻塞至有空闲插槽可用。
    Queue.put_nowait(item)
    # 相当于 put(item, False) 。
    Queue.get(block=True, timeout=None)
    # 从队列中移除并返回一个项目。
    # 如果可选参数 block 是 true 并且 timeout 是 None (默认值),则在必要时阻塞至项目可得到。
    Queue.get_nowait()
    # 相当于 get(False) 
    

    跟踪 排队的任务 是否 被守护的消费者线程 完整的处理。

    Queue.task_done()
    # 表示前面排队的任务已经被完成。
    Queue.join()
    # 阻塞至队列中所有的元素都被接收和处理完毕。
    

    .
    .
    .

    参考文档

    python官方文档module-queue
    queue源码

    相关文章

      网友评论

          本文标题:python queue

          本文链接:https://www.haomeiwen.com/subject/xvwqvhtx.html