队列是一种数据结构,特点是“先进先出”(First-In-First-Out, FIFO)。在队列中,新的元素被插入到队列的末尾,而队列中最先加入的元素则在队列的开头。想象一下在餐厅排队打饭,先来的先进去,后到的要等前面的人打完饭才能自己打。
Python标准库提供了许多队列的实现,比如:
这篇文章主要介绍queue的使用。queue提供了两种队列的实现:
Queue提供了以下方法:
from queue import Queue
q = Queue()
for i in range(5):
q.put(i)
while not q.empty():
print(q.get())
在这个示例中,我们创建一个Queue对象,并循环向队列中添加5个元素。然后从队列中一个个取出元素,并打印出来。
import time
from queue import Queue
from threading import Thread
def worker(q: Queue):
while True:
task = q.get()
if task is None:
q.task_done()
break
print(f"Processing task: {task}")
time.sleep(1)
q.task_done()
q = Queue()
# 创建10个工作线程
n_worker_threads = 10
threads = []
for i in range(n_worker_threads):
t = Thread(target=worker, args=(q,))
t.start()
threads.append(t)
# 在队列中放入20个任务
for i in range(20):
q.put(i)
# 等待所有任务处理完成
q.join()
# 给每个线程发放“结束”信号
for i in range(n_worker_threads):
q.put(None)
# 等待所有线程结束
for t in threads:
t.join()
在这个示例中,我们创建了一个有10个工作线程的队列。然后向队列中放入20个任务,让这10个工作线程并行地处理这些任务。一旦所有任务都处理完了,我们可以给每个工作线程发放“结束”信号,然后等待所有线程结束。