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()方法操作队列,它们默认会阻塞直到操作完成。
总结:根据需求选对队列类型。
不错

