网站建设 599,网站收录查询接口,连接友谊,现在做个网站要多少钱import threading
import queue
import random
import time# 原始数据列表
numbers [1, 2, 3, 4, 5, 6]# 创建与列表长度相同的队列组
queues [queue.Queue() for _ in range(len(numbers))]def producer():生产者线程#xff1a;随机从列表取数并分发到对…import threading
import queue
import random
import time# 原始数据列表
numbers [1, 2, 3, 4, 5, 6]# 创建与列表长度相同的队列组
queues [queue.Queue() for _ in range(len(numbers))]def producer():生产者线程随机从列表取数并分发到对应队列while True:num random.choice(numbers) # 随机选择数字idx num - 1 # 计算对应队列索引1→02→1依此类推queues[idx].put(num) # 将数字放入对应队列print(fProduced {num} → Queue {idx})time.sleep(random.random() * 0.5) # 模拟处理耗时def consumer(q_index):消费者线程持续处理指定队列中的数据q queues[q_index]while True:num q.get() # 阻塞获取队列数据print(f[Consumer {q_index}] Processing {num} (唯一ID))q.task_done() # 标记任务完成time.sleep(random.random() * 0.5) # 模拟处理耗时if __name__ __main__:# 启动3个生产者线程可按需调整数量for _ in range(3):t threading.Thread(targetproducer, daemonTrue)t.start()# 启动与列表长度相同的消费者线程for i in range(len(numbers)):t threading.Thread(targetconsumer, args(i,), daemonTrue)t.start()# 主线程保持运行实际生产环境需要更优雅的退出机制try:while True:time.sleep(3600)except KeyboardInterrupt:print(Program terminated)代码说明 队列系统创建与原始列表长度相同的队列组每个队列对应一个数字索引0对应数字1索引1对应数字2依此类推 生产者线程 持续随机从原始列表中选择数字根据数字值计算对应队列索引num-1将数字放入对应队列 消费者线程 每个消费者绑定到特定队列通过索引持续从绑定队列获取数据保证每个消费者只处理唯一对应的数字 运行特性 使用daemon线程方便程序退出包含随机延迟模拟真实处理场景按CtrlC可优雅终止程序
执行效果
多个生产者线程会持续随机选择数字并分发到对应队列每个消费者线程只会处理自己对应队列中的数字输出示例Produced 3 → Queue 2
Produced 5 → Queue 4
[Consumer 2] Processing 3 (唯一ID)
[Consumer 4] Processing 5 (唯一ID)
Produced 1 → Queue 0
[Consumer 0] Processing 1 (唯一ID)扩展建议
调整生产者/消费者数量观察行为变化修改time.sleep()参数控制处理速度添加队列大小限制防止内存溢出使用queue.Queue(maxsizeN)实现流量控制
这个实现保证了每个消费者线程只会处理特定数字同时通过队列系统实现了生产-消费的解耦符合多线程编程的最佳实践。