超详细的Python queue模块全攻略
Python的queue
模块提供了几种线程安全的队列,以支持多线程编程。这里是一些常用的队列类型和相关操作的示例代码:
queue.Queue
:FIFO(先进先出)队列。
import queue
q = queue.Queue() # 创建一个Queue对象
q.put('item1') # 添加元素
q.put('item2')
print(q.get()) # 移除并获取元素,打印 'item1'
print(q.get()) # 打印 'item2'
queue.LifoQueue
:LIFO(后进先出)队列。
import queue
q = queue.LifoQueue() # 创建一个LifoQueue对象
q.put('item1') # 添加元素
q.put('item2')
print(q.get()) # 移除并获取元素,打印 'item2'
print(q.get()) # 打印 'item1'
queue.PriorityQueue
:优先级队列,元素按照优先级排序。
import queue
q = queue.PriorityQueue() # 创建一个PriorityQueue对象
q.put((10, 'item1')) # 元素是一个元组,格式为 (优先级数值, 数据)
q.put((5, 'item2'))
print(q.get()) # 打印 (5, 'item2'),因为它有最低的优先级
print(q.get()) # 打印 (10, 'item1')
- 队列的基本操作:
put(item[, block[, timeout]])
:添加元素到队列。get([block[, timeout]])
:从队列中移除并返回元素。empty()
:如果队列为空,返回True
;否则返回False
。full()
:如果队列满,返回True
;否则返回False
。qsize()
:返回队列中元素的数量。
- 使用
queue
模块的task_done()
和join()
方法来同步队列。
import queue
import threading
q = queue.Queue()
# 线程的工作函数
def worker():
while True:
item = q.get()
print(item)
q.task_done() # 通知task_done()方法,一个任务已经处理完毕
if item is None:
break
# 创建并启动线程
threads = []
for i in range(2):
t = threading.Thread(target=worker)
t.daemon = True
t.start()
threads.append(t)
# 向队列中添加任务
for i in range(5):
q.put(i)
# 通知所有线程退出
for _ in range(2):
q.put(None)
# 等待所有的线程完成所有的任务
q.join()
以上代码展示了如何使用queue
模块创建不同类型的队列,以及如何在多线程环境中同步使用队列。
评论已关闭