模块介绍
Python 中 queue
模块提供了对队列数据结构的支持,主要用于在多线程环境中共享数据。该模块支持三种类型的队列:FIFO 队列、LIFO 队列和优先级队列。Queue 模块是 Python 标准库的一部分,无需额外安装,适用于 Python 3.x 版本。
应用场景
queue
库在多线程编程中被广泛使用,尤其是当多个线程需要安全地交换信息时。以下是一些典型的应用场景:
- 任务队列:将需要处理的任务按顺序放入队列,多个线程一起处理这些任务。
- 生产者 - 消费者模型:生产者线程将数据放入队列,消费者线程从队列中取出数据处理。
- 资源池管理:通过队列管理可用资源,如数据库连接、线程等。
安装说明
queue
库是 Python 标准库中的一部分,默认已经安装。只需在脚本中引入即可使用。
用法举例
示例 1: 创建一个简单的任务队列
1 2 3 4 5 6 7 8 9 10 11 12 13
| import queue
task_queue = queue.Queue()
task_queue.put('task1') task_queue.put('task2')
while not task_queue.empty(): task = task_queue.get() print(f'Processing {task}')
|
使用场景:假定你需要处理一系列任务,可以将这些任务添加到队列中,并用工作线程处理。
示例 2: 生产者 - 消费者模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import threading import queue import time
q = queue.Queue()
def producer(name, nums): for num in nums: q.put(num) print(f'{name} produced {num}') time.sleep(1)
def consumer(name): while True: item = q.get() if item is None: break print(f'{name} consumed {item}') time.sleep(2) q.task_done()
producer_thread = threading.Thread(target=producer, args=('Producer', range(10))) consumer_thread = threading.Thread(target=consumer, args=('Consumer',))
producer_thread.start() consumer_thread.start()
producer_thread.join()
q.put(None)
consumer_thread.join()
|
使用场景:多个生产者生成数据,多个消费者处理数据,通过 Queue 实现线程间安全的数据传递。
示例 3: 使用优先级队列处理任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import queue
priority_queue = queue.PriorityQueue()
priority_queue.put((1, 'high priority task')) priority_queue.put((10, 'low priority task')) priority_queue.put((5, 'medium priority task'))
while not priority_queue.empty(): priority, task = priority_queue.get() print(f'Processing {task} with priority {priority}')
|
使用场景:根据任务的优先级处理任务,确保高优先级任务优先被处理。
强烈建议大家关注我的博客(全糖冲击博客),这里汇集了所有 Python 标准库使用教程,方便查询和学习。关注我,你将不仅能获得详细的代码示例和最佳实践,还能参与社区讨论,分享心得体会。无论你是编程新手还是有丰富经验的开发者,这里都有适合你的内容。一起进步,共同成长!
软件版本可能变动
如果本文档不再适用或有误,请留言或联系我进行更新。让我们一起营造良好的学习氛围。感谢您的支持! - Travis Tang