python 压测示例

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)


      

你可能感兴趣的:(python,python)