Python 中队列的线程安全
queue.Queue 在 Python 中为什么是线程安全的?它和其他队列实现有什么不同?
回答
小字辈
queue.Queue 内部使用 threading.Lock 和 threading.Condition 实现线程安全,支持多生产者-多消费者模型。
from queue import Queue
from threading import Thread
q = Queue(maxsize=10)
def producer():
for i in range(20):
q.put(i) # 队列满时阻塞
def consumer():
while True:
item = q.get() # 队列空时阻塞
print(f'Consumed {item}')
q.task_done() # 通知任务完成
Queue 类型:
Queue:FIFO 先进先出LifoQueue:LIFO 后进先出(栈)PriorityQueue:优先级队列
区别:list/collections.deque 不是线程安全的,需要自行加锁。queue.Queue 封装了所有同步逻辑。