zoukankan      html  css  js  c++  java
  • python mysql数据库压力测试

    python mysql数据库压力测试

    pymysql 的执行时间对比

     1,装饰器,计算插入1000条数据需要的时间

    def timer(func):
        def decor(*args):
            start_time = time.time()
            func(*args)
            end_time = time.time()
            d_time = end_time - start_time
            print("the running time is : ", d_time)
        return decor
    
    @timer
    def add_test_users(n):
        conn = pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
        cursor = conn.cursor()
        for i in range(0, n):
            try:
                sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
                param = (('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i)))
                cursor.execute(sql, param)
    
            except Exception as e:
                return
    
        conn.commit()
        cursor.close()
        conn.close()
        print('OK')
    
    add_test_users(10)

     2,装饰器,计算插入100条数据需要的时间

    def timer(func):
        def decor(*args):
            start_time = time.time()
            func(*args)
            end_time = time.time()
            d_time = end_time - start_time
            print("the running time is : ", d_time)
        return decor
    
    @timer
    def add_test_users(n):
        usersvalues = []
        for i in range(1, n):
            usersvalues.append(('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i)))
        conn = pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
        cursor = conn.cursor()
        cursor.executemany('insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)', usersvalues)
    
        conn.commit()
        cursor.close()
        conn.close()
        print('OK')
    
    add_test_users(10)

    对比execute和executemany 的耗时对比:

    conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
    cur = conn.cursor()
    values = []
    for i in range(10):
        value = ('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i))
        values.append(value)
    sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
    now_time = time.time()
    try:
        cur.executemany(sql, values)
        conn.commit()
    except Exception as err:
        print(err)
    finally:
        cur.close()
        conn.close()
    end_time = time.time()
    print("executemany花费时间为: "+ str(end_time-now_time))
    
    
    conn
    = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8') cur = conn.cursor() values = [] for i in range(10): value = ('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i)) values.append(value) sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)" now_time = time.time() for val in values: print(val) try: cur.execute(sql, val) conn.commit() except Exception as err: print(err) finally: cur.close() conn.close() end_time = time.time() print("execute花费时间为: "+ str(end_time-now_time))

    executemany花费时间为: 0.003998994827270508
    execute花费时间为: 0.025983810424804688

    Executemany 速度比execute快很多!!!

    pymysql中 execute 和 executemany 性能对比 (外部文件导入)

    conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
    cur = conn.cursor()
    values = []
    with open(r"C:UsersAdministratorDesktopstudents1.txt", "r+",encoding="utf-8") as fo:
        while True:
            line_txt = fo.readline().replace("
    ","").replace("
    ","")
            if not line_txt:
                break
            line_txt_txts = line_txt.split(',')
            values.append(line_txt_txts)
    print(values)
    
    sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
    now_time = time.time()
    try:
        cur.executemany(sql, values)
        conn.commit()
    except Exception as err:
        print(err)
    finally:
        cur.close()
        conn.close()
    end_time = time.time()
    print("executemany花费时间为: "+ str(end_time-now_time))
    students2.txt 文件内容:
    Tom1,20,boy,10001,13900000001,shanghai,91
    Tom2,21,boy,10002,13900000002,shanghai,92
    Tom3,22,boy,10003,13900000003,shanghai,93
    Tom4,24,boy,10004,13900000004,shanghai,94
    Tom5,25,girl,10005    ,13900000005,shanghai,95
    Tom6,26,girl,10006    ,13900000006,shanghai,96
    Tom7,27,girl,10007    ,13900000007,shanghai,97
    Tom8,28,girl,10008    ,13900000008,shanghai,98
    Tom9,29,boy,10009,13900000009,shanghai,99
    Tom10,30,boy,10010,13900000010,shanghai,100
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
    cur = conn.cursor()
    values = []
    with open(r"C:UsersAdministratorDesktopstudents1.txt", "r+",encoding="utf-8") as fo:
        while True:
            line_txt = fo.readline().replace("
    ","").replace("
    ","")
            if not line_txt:
                break
            line_txt_txts = line_txt.split(',')
            values.append(line_txt_txts)
    print(values)
    sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
    now_time = time.time()
    for val in values:
        print(val)
        try:
            cur.execute(sql, val)
            conn.commit()
        except Exception as err:
            print(err)
    cur.close()
    conn.close()
    
    end_time = time.time()
    print("execute花费时间为: "+ str(end_time-now_time))

    外部导入txt文件流
    executemany花费时间为: 0.004998683929443359
    execute花费时间为: 0.030979633331298828

    python多线程执行mysql

    简单方式开启多线程
    Def run(sql):
    pass sql = 'select * from students1 where score = 90' t1 = threading.Thread(target=run, args=(sql,)) t2 = threading.Thread(target=run, args=(sql,)) t3 = threading.Thread(target=run, args=(sql,)) t1.start() t2.start() t3.start()

     多线程运行时间

    def add_del_update_search():
        coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
        sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
        param = ('tom555', '55', 'boy', '10055', '13900000055', 'shanghai', '55')
        cursor = coon.cursor()
        try:
            count = cursor.execute(sql, param)
            coon.commit()
            print(count)
        except Exception as e:
            print(e)
            coon.rollback()
        cursor.close()
        coon.close()
    
    start_time = time.time()
    t1 = threading.Thread(target=add_del_update_search)
    t2 = threading.Thread(target=add_del_update_search)
    t3 = threading.Thread(target=add_del_update_search)
    t1.start()
    t2.start()
    t3.start()
    end_time = time.time()
    d_time = end_time - start_time
    print("多线程运行时间是 : ", str(d_time))

    单线程运行时间

    def add_del_update_search():
        coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
        sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
        param = ('tom555', '55', 'boy', '10055', '13900000055', 'shanghai', '55')
        cursor = coon.cursor()
        try:
            count1 = cursor.execute(sql, param)
            count2 = cursor.execute(sql, param)
            count3 = cursor.execute(sql, param)
            coon.commit()
            print(count1)
            print(count2)
            print(count3)
        except Exception as e:
            print(e)
            coon.rollback()
        cursor.close()
        coon.close()
    
    start_time = time.time()
    add_del_update_search()
    end_time = time.time()
    d_time = end_time - start_time
    print(“单线程运行时间是 : ", str(d_time))

    单线程 for 循环操作数据库

    def add_del_update_search (n):
        coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
        sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
        param = ('tom555', '55', 'boy', '10055', '13900000055', 'shanghai', '55')
        cursor = coon.cursor()
        for i in range(0, n):
            try:
                cursor.execute(sql, param)
                coon.commit()
            except Exception as e:
                return
        cursor.close()
        coon.close()
    
    start_time = time.time()
    add_del_update_search(100)
    end_time = time.time()
    d_time = end_time - start_time
    print("单个线程运行时间是 : ", str(d_time))

    多线程 for 循环操作数据库

    def add_del_update_search():
        coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
        sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
        param = ('tom555', '55', 'boy', '10055', '13900000055', 'shanghai', '55')
        cursor = coon.cursor()
        try:
            count = cursor.execute(sql, param)
            coon.commit()
        except Exception as e:
            print(e)
            coon.rollback()
        cursor.close()
        coon.close()
    
    start_time = time.time()
    for i in range (100):
        t = threading.Thread(target=add_del_update_search)
        t.start()
    
    end_time = time.time()
    d_time = end_time - start_time
    print("多线程运行时间是 : ", str(d_time))
  • 相关阅读:
    如何解决js跨域问题
    Java Web系统常用的第三方接口
    webapi返回json格式,并定义日期解析格式
    华为手机打开Logcat的方法
    Kendo UI for ASP.NET MVC 的一些使用经验(转)
    adobe pro破解说明
    阿里云服务器添加解析域名
    tfs代码上传到server并下载到新位置
    kendo 级联加带搜索的下拉框以及js赋值
    函数进阶
  • 原文地址:https://www.cnblogs.com/111testing/p/12008014.html
Copyright © 2011-2022 走看看