📜  队列 python (1)

📅  最后修改于: 2023-12-03 15:42:23.369000             🧑  作者: Mango

简介

队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则,即最先进入队列的元素最先被处理,而最后进入队列的元素最后被处理。队列可以用于很多应用场景,例如网络通信、多线程编程等。

Python提供了内置的队列模块——queue,它包含了很多队列相关的类和函数。

队列类

queue模块提供了三个主要的类:

Queue

Queue类是线程安全的队列,常用于多线程编程。它提供了常见的队列操作方法,如put、get等。

以下是一个使用Queue类的例子:

from queue import Queue

q = Queue()

q.put(1)
q.put(2)
q.put(3)

while not q.empty():
    print(q.get())

输出:

1
2
3
LifoQueue

LifoQueue类是后进先出(LIFO)的队列,与栈的操作类似。

以下是一个使用LifoQueue类的例子:

from queue import LifoQueue

q = LifoQueue()

q.put(1)
q.put(2)
q.put(3)

while not q.empty():
    print(q.get())

输出:

3
2
1
PriorityQueue

PriorityQueue类是优先级队列,其中每个元素都有一个优先级。按照优先级顺序出队列。

以下是一个使用PriorityQueue类的例子:

from queue import PriorityQueue

q = PriorityQueue()

q.put((3, "apple"))
q.put((2, "banana"))
q.put((1, "orange"))

while not q.empty():
    print(q.get()[1])

输出:

orange
banana
apple

队列函数

queue模块中还提供了一些队列相关的函数:

queue.empty()

判断队列是否为空。

from queue import Queue

q = Queue()

print(q.empty())  # True

q.put(1)

print(q.empty())  # False
queue.full()

判断队列是否已经为满。

from queue import Queue

q = Queue(maxsize=2)

print(q.full())  # False

q.put(1)
q.put(2)

print(q.full())  # True
queue.qsize()

返回队列的大小。

from queue import Queue

q = Queue()

q.put(1)
q.put(2)
q.put(3)

print(q.qsize())  # 3
queue.get_nowait()和queue.put_nowait()

分别为不阻塞的出队和入队方法,当队列为空或队列已经满时,会抛出异常。与get()和put()方法不同,它们不会阻塞当前线程。

from queue import Queue

q = Queue(maxsize=2)

q.put(1)
q.put(2)

print(q.get_nowait())  # 1

q.put_nowait(3)  # 抛出异常,队列已满

总结

队列是一种常见的数据结构,Python提供了内置的queue模块,其中包含了队列相关的类和函数,非常方便。使用queue模块能够更加简便、高效地实现队列的操作。