list,通过queue,将里面的值做分组

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  # 计算对应队列索引(1021,依此类推)
        queues[idx].put(num)  # 将数字放入对应队列
        print(f"Produced {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(target=producer, daemon=True)
        t.start()

    # 启动与列表长度相同的消费者线程
    for i in range(len(numbers)):
        t = threading.Thread(target=consumer, args=(i,), daemon=True)
        t.start()

    # 主线程保持运行(实际生产环境需要更优雅的退出机制)
    try:
        while True:
            time.sleep(3600)
    except KeyboardInterrupt:
        print("Program terminated")

代码说明:

  1. 队列系统:创建与原始列表长度相同的队列组,每个队列对应一个数字(索引0对应数字1,索引1对应数字2,依此类推)

  2. 生产者线程

    • 持续随机从原始列表中选择数字
    • 根据数字值计算对应队列索引(num-1)
    • 将数字放入对应队列
  3. 消费者线程

    • 每个消费者绑定到特定队列(通过索引)
    • 持续从绑定队列获取数据
    • 保证每个消费者只处理唯一对应的数字
  4. 运行特性

    • 使用daemon线程方便程序退出
    • 包含随机延迟模拟真实处理场景
    • 按Ctrl+C可优雅终止程序

执行效果:

  1. 多个生产者线程会持续随机选择数字并分发到对应队列
  2. 每个消费者线程只会处理自己对应队列中的数字
  3. 输出示例:
    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(maxsize=N)实现流量控制

这个实现保证了每个消费者线程只会处理特定数字,同时通过队列系统实现了生产-消费的解耦,符合多线程编程的最佳实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值