1. 背景
制造300个并发请求模拟qps=300的压测环境
2. 安装相关包
pip3 install threadpool
3. Demo
import threadpool
import requests
import time
import random
params = {
"uuid":"478baadc-8ed4-4569-bd08-100afc88501f1",
"imei1":"",
"gaid":"",
"serial_number":"",
"ip_address":"192.168.1.1041",
"android_id":"d4a182ce3b0518f11"
}
def main(temp_params):
response = requests.post('http://127.0.0.1:8099/search/', json=temp_params)
# print(str(response.json()))
if __name__ == "__main__":
pool = threadpool.ThreadPool(300)
params_list = []
for i in range(300):
# 选择一些参数对其值进行随机修改,编造一些新的记录
temp_params = params
temp_params['uuid'] = str(random.randint(1,100))
temp_params['imei1'] = str(random.randint(1,100))
temp_params['gaid'] = str(random.randint(1,100))
params_list.append(temp_params)
# params_list = [params1, params2, params300] # make some request params
t0 = time.time()
tasks = threadpool.makeRequests(main, params_list)
[pool.putRequest(task) for task in tasks]
pool.wait()
t1 = time.time()
print(t1-t0)
4. 回调函数
makeRequests的原型如下:
def makeRequests(callable_, # 线程将要启动任务函数
args_list, # 要传给任务函数的参数列表
callback=None, # 回调函数,可以用于收集任务结束后的结果或者环境清理
exc_callback=_handle_thread_exception
)
其中 callback必须接受2个匿名参数, 按顺序分别是WorkRequest对象和任务函数的结果。
def save_callback(request, result):
# 第1个参数是request,可以访问request.requestID
# 第2个参数是request执行完的结果
print(request.requestID, result)
with open('result.txt', 'a') as f:
f.write(result + '\n')
调用
requests = threadpool.makeRequests(fun1, params, save_callback)