美文网首页
2020-08-11 queue 笔记

2020-08-11 queue 笔记

作者: 瑛伟达 | 来源:发表于2020-08-11 21:56 被阅读0次

    queue 一个同步的队列

    queue模块实现了多生产者、多消费者队列。这特别适用于消息必须安全地在多线程间交换的线程编程。模块中的 Queue类实现了所有所需的锁定语义。

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

    在内部,这三个类型的队列使用锁来临时阻塞竞争线程;然而,它们并未被设计用于线程的重入性处理。

    queue 模块定义了下列类:
    class queue.Queue(maxsize = 0)
    这是个FIFO队列,maxsize 是个整数,是队列中项数的最大上限,一旦达到这个大小,插入新的项将会被阻塞,直到队列被消耗。如果 maxsize 小于或等于0 ,队列的大小是无限的。

    class queue.LifoQueue(maxsize = 0)
    LIFO 后进先出队列,maxsize 是个整数,是队列中项数的最大上限,一旦达到这个大小,插入新的项将会被阻塞,直到队列被消耗。如果 maxsize 小于或等于0 ,队列的大小是无限的。

    class queue.PriorityQueue(maxsize = 0)
    参考1
    参考2
    参考3
    参考4
    优先级队列构造函数,maxsize 是个整数,是队列中项数的最大上限,一旦达到这个大小,插入新的项将会被阻塞,直到队列被消耗。如果 maxsize 小于或等于0 ,队列的大小是无限的。

    如果 data 元素没有可比性,数据将被包装在一个类中,忽略数据值,仅仅比较优先级数字 :

    rom dataclasses import dataclass, field
    from typing import Any
    
    @dataclass(order=True)
    class PrioritizedItem:
        priority: int
        item: Any=field(compare=False)
    

    相关文章

      网友评论

          本文标题:2020-08-11 queue 笔记

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