在运行代码的时候,总会想让程序同时运行几个东西,这个时候就需要用到多线程。可以说使用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") # 打印请求速度