import threading
import time
from multiprocessing import Queue
import random

# 任务队列
taskQueue = Queue()
# 结果队列
resultQueue = Queue()

def produceTask():
    for i in range(100):
        taskQueue.put("task "+str(i))
        print(f"生产了任务：{str(i)}")

def doSomething(task, model="deepseek-ai/DeepSeek-R1"):
    #print("正在计算任务：" + str(task))
    # 这里模拟等待远程服务器的结果
    time.sleep(random.randint(2, 5))
    #print("任务：" + str(task)+" 计算完毕")
    return "task "+str(task)+" has been processed"
#
# 消费者
def consumTask(threadIndex):
    while True:
        task = taskQueue.get(block=True)
        result = doSomething(task)
        print("消费者: "+str(threadIndex)+" 已经处理完数据： "+str(task))
        resultQueue.put(result)

def askBatchMT(processorCount):
    # 启动生产者，可以是多个
    print("启动生产者")
    p = threading.Thread(target=produceTask) # 开启一个线程
    # 实例化一个Tread对象, 相当于创建了一个新的线程, target参数告诉这个新线程要去执行什么函数
    p.start()
    # 启动消费者，可以是多个
    for i in range(processorCount):
        print("启动消费者")
        p = threading.Thread(target=consumTask, args=(i,)) # 开启第i个线程
        p.start()
    # 接收结果
    # print("启动结果收集")
    while True:
        result = resultQueue.get(block=True)
        print(result)


if __name__ == "__main__":
    # 线程数量
    processorCount = 3
    askBatchMT(processorCount)
