在运行代码的时候,总会想让程序同时运行几个东西,这个时候就需要用到多线程。可以说使用python中的threading库来实现多线程,多线程运行的具体线程数量和每个线程的执行时间由操作系统的调度策略决定。
比如我现在需要同时发起请求,那么就可以发起请求的业务带啊吗分装为一个函数,放入线程池thread = threading.Thread(target=send_request,args=(item,))
,然后启动加入线程队列,再使用thread.join()
等待所有线程执行完毕。
完整代码如下
url = "" # 定义请求的URL地址headers = {
}with open('data.json', 'r') as file: # 打开存储数据的JSON文件datalist = json.load(file) # 加载JSON数据response_times = [] # 初始化存储响应时间的列表def send_request(item):"""发送请求的函数"""data = {"model": "gpt-3.5","key": item,}start_time = time.time() # 记录请求开始时间response = requests.post(url, headers=headers, json=data) # 发送POST请求end_time = time.time() # 记录请求结束时间response_times.append(end_time - start_time) # 将响应时间添加到列表中threads = [] # 初始化线程列表
start_time = time.time() # 记录总体开始时间#创建datalist长个的线程
for item in tqdm(datalist): # 对数据列表进行循环thread = threading.Thread(target=send_request, args=(item,)) # 创建线程thread.start() # 启动线程threads.append(thread) # 将线程添加到线程列表中for thread in threads:thread.join() # 等待所有线程执行完毕print("已完成 %d / %d 个请求" % (len(response_times), len(datalist))) # 打印已完成的请求数量total_time = time.time() - start_time # 计算总体花费的时间
print("总秒数:", total_time, "s") # 打印总秒数
print("速度:", str(len(datalist) / total_time), "requests/s") # 打印请求速度