python队列检索
时间: 2025-03-27 09:23:55 浏览: 25
### Python 中队列的使用方法
Python 提供了多种方式来实现队列结构,其中最常用的是 `queue.Queue` 和 `collections.deque`。
#### 使用 `collections.deque`
`deque` 是双端队列的一种高效实现,在两端进行插入和删除操作的时间复杂度都是 O(1),这使得它非常适合用于队列的操作。下面是一个简单的例子展示如何创建并使用 `deque`:
```python
from collections import deque
# 创建一个空的双向队列
q = deque()
# 向队列右侧添加元素
for i in range(5):
q.append(i)
print(f"Queue after appending elements: {list(q)}")
# 从队列左侧移除元素
while q:
element = q.popleft()
print(f"Popped element from queue: {element}")
```
这段代码展示了向队列中添加元素以及从中移除元素的方法[^1]。
#### 性能测试
为了验证 `deque` 的性能优势,可以执行如下时间测量实验:
```python
from collections import deque
from time import time
start_time = time()
n = 100000
test_queue = deque()
# 测试 append 方法
for i in range(n):
test_queue.append(i)
# 测试 popleft 方法
for _ in range(n):
test_queue.popleft()
end_time = time()
execution_time = end_time - start_time
print(f"time= {execution_time}") # 输出类似于:time= 0.014119148254394531
```
此部分代码通过大量数据点对比了 `append()` 和 `popleft()` 操作的速度表现。
#### 使用 `queue.Queue`
对于多线程环境下的生产者消费者模式来说,推荐使用标准库中的 `queue.Queue` 类型。该类提供了线程安全版本的基础队列功能,并支持阻塞式的读写操作。
```python
import threading
from queue import Queue
def producer(queue, item):
queue.put(item)
def consumer(queue):
while True:
item = queue.get()
if item is None:
break
process_item(item)
queue.task_done()
if __name__ == "__main__":
my_queue = Queue(maxsize=0) # maxsize=0 表示无界队列
threads_num = 5
producers = []
consumers = []
for t_id in range(threads_num):
prod_thread = threading.Thread(target=producer, args=(my_queue,))
cons_thread = threading.Thread(target=consumer, args=(my_queue,))
producers.append(prod_thread)
consumers.append(cons_thread)
for thread in producers + consumers:
thread.start()
for thread in producers + consumers:
thread.join()
```
上述程序片段定义了一个基本框架来进行并发处理任务,利用了 `queue.Queue` 来协调多个工作单元之间的通信。
阅读全文
相关推荐

















