Python常用队列全面详细梳理
队列是一种常用的数据结构,它按照先进先出(FIFO)的原则存储数据。Python中有许多队列的实现方式,各有特点。本文将介绍Python中常用的队列实现方式,并提供两个示例说明。
内置队列模块 queue
Python内置了一个队列模块 queue,可以使用它来实现线程安全的队列。queue提供了FIFO、LIFO和优先级队列等模型。
FIFO队列
队列模块中的FIFO队列,是指先进去的元素先被取出来。以下代码展示了如何创建一个简单的FIFO队列:
import queue
q = queue.Queue(maxsize=10) # 初始化大小为10的队列
q.put(1) # 向队列中添加一个元素
q.put(2)
q.put(3)
print(q.get()) # 从队列中取出一个元素
输出结果为:1。
LIFO队列
队列模块中的LIFO队列,是指后进去的元素先被取出来。以下代码展示了如何创建一个简单的LIFO队列:
import queue
q = queue.LifoQueue(maxsize=10) # 初始化大小为10的队列
q.put(1) # 向队列中添加一个元素
q.put(2)
q.put(3)
print(q.get()) # 从队列中取出一个元素
输出结果为:3。
多线程队列模块 queue
Python提供了 queue 模块来提供在线程编程中的内存缓存区功能,也可以用于线程通信等。queue同时提供了锁原语,可以保证多线程情况下的正确性。
以下是一个示例代码,展示了如何同时使用多个线程来异步访问一个队列:
import queue
import threading
def worker():
while True:
item = q.get()
if item is None: # 退出条件
break
print(item)
q.task_done() # 任务完成标记
q = queue.Queue()
# 启动5个工作线程
for i in range(5):
t = threading.Thread(target=worker)
t.daemon = True # 守护主线程
t.start()
# 发送50个任务到工作队列中
for item in range(50):
q.put(item)
q.join() # 等待所有动作完成
以上代码会启动5个工作线程,每个工作线程从队列中获取任务并输出。为了退出线程,我们在每个任务完成后调用了 q.task_done() 方法。在主线程中,我们等待所有任务完成完成事 q.join(),保证所有工作线程都已经退出。
总结
Python中队列的实现方式多种多样,queue模块是Python标准库中提供的实现方式,并且支持FIFO、LIFO和优先级队列等多种模型。对于多线程情况下的队列操作,我们可以选择使用queue模块,因为它具有线程安全性和锁机制。
以上就是Python常用队列的详细介绍以及相关示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python常用队列全面详细梳理 - Python技术站