2020-08-11 queue 笔记

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 笔记)