Python标准库中的四种队列整理与使用指南

整理了 collections.deque,queue.Queue,asyncio.Queue,multiprocessing.Queue 四种队列的区别和使用场景。
https://juejin.im/post/5b022e456fb9a07aaf35810d
Python标准库中的四种队列整理与使用指南

2 回复

Python标准库里的队列模块(queue)确实是个好东西,它提供了线程安全的队列实现,在多线程编程里特别有用。我整理一下这四种队列的用法,直接上代码。

1. Queue(先进先出队列) 这是最常用的队列,就是标准的FIFO队列。

import queue

q = queue.Queue(maxsize=3)  # 设置队列最大容量
q.put('A')
q.put('B')
q.put('C')

print(q.get())  # 输出: A
print(q.get())  # 输出: B

2. LifoQueue(后进先出队列) 其实就是栈结构,最后放进去的先出来。

import queue

lq = queue.LifoQueue()
lq.put('A')
lq.put('B')
lq.put('C')

print(lq.get())  # 输出: C
print(lq.get())  # 输出: B

3. PriorityQueue(优先级队列) 元素按优先级排序,优先级数字小的先出队。

import queue

pq = queue.PriorityQueue()
pq.put((3, 'C任务'))
pq.put((1, 'A任务'))
pq.put((2, 'B任务'))

print(pq.get())  # 输出: (1, 'A任务')
print(pq.get())  # 输出: (2, 'B任务')

4. SimpleQueue(简单队列) Python 3.7新增的,比Queue更简单但功能少一些,没有任务跟踪功能。

import queue

sq = queue.SimpleQueue()
sq.put('A')
sq.put('B')

print(sq.get())  # 输出: A
print(sq.empty())  # 检查队列是否为空

关键区别:

  • Queue:标准FIFO,功能最全
  • LifoQueue:栈结构,后进先出
  • PriorityQueue:按优先级排序
  • SimpleQueue:更轻量,但缺少任务跟踪

使用场景:

  • 普通任务队列用Queue
  • 需要栈结构时用LifoQueue
  • 任务有优先级时用PriorityQueue
  • 只需要基本队列功能时用SimpleQueue

这些队列都是线程安全的,所以在多线程环境下可以放心使用。记得用put()get()方法操作队列,它们默认会阻塞直到操作完成。

总结:根据需求选对队列类型。


回到顶部