006Python-threading__3
以下是一个使用 生产者-消费者模型 的线程间通信示例,通过 queue.Queue
实现安全的数据传递,并包含详细的注释和关键机制说明:
1 |
|
关键机制说明
1. 队列的线程安全性
queue.Queue
内部已经实现了锁机制,无需手动加锁即可保证多线程安全。put()
和get()
方法在队列满/空时会自动阻塞,避免忙等待。
2. 终止信号的处理
- 生产者通过向队列发送
STOP_SIGNAL
(示例中使用None
)通知消费者停止。 - 消费者检查到终止信号后,跳出循环并标记任务完成(
task_done()
必须调用)。
3. task_done()
与 join()
的配合
task_queue.task_done()
每处理完一个任务必须调用一次,否则task_queue.join()
会无限阻塞。task_queue.join()
主线程通过该方法等待队列中所有任务(包括终止信号)被标记为完成。
4. 输出示例
1 |
|
适用场景
- I/O密集型任务:如批量下载文件时,生产者生成下载链接,消费者执行下载。
- 任务调度:主线程分配任务,多个工作线程并行处理。
- 实时数据处理:生产者接收传感器数据,消费者实时分析。
扩展:多消费者模式
若需多个消费者并行处理任务,只需启动多个消费者线程:
1 |
|
注意事项
- 终止信号的广播
如果有多个消费者,需为每个消费者发送一个终止信号(例如放入N
个STOP_SIGNAL
)。 - 资源释放
消费者退出前应释放资源(如关闭文件、数据库连接)。 - 异常处理
在task_done()
前添加try...finally
块确保任务标记:1
2
3
4try:
# 处理任务
finally:
task_queue.task_done()
006Python-threading__3
https://jackiedai.github.io/2025/03/19/011Python/008Python-threading3/