美文网首页
python多线程写入数据到mysql中

python多线程写入数据到mysql中

作者: 逍遥_yjz | 来源:发表于2022-12-03 19:34 被阅读0次
    #coding=utf-8
    import pymysql
    import datetime
    import threading
    
    '''1. 只有线程操作数据'''
    def onlyHaveThreading():
        def insert_DB():
            conn = pymysql.connect(host='xx.xx.xxx.xxx', user='root', password="123456",
                                   database='xiancheng', port=3306,
                                   charset='utf8')
            cus= conn.cursor()
            try:
                for i in range(1000):
                    now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                    create_tm = datetime.datetime.strptime(now_str, '%Y-%m-%d %H:%M:%S')
                    sql=("INSERT INTO test_table VALUES ('%s','%s','%s')") % (i,i,create_tm)
                    #tlock.acquire()
                    ok = cus.execute(sql)
                    conn.commit()
                    # print(i)
                    #tlock.release()
            except Exception as e:
                print ("one error happen",e)
            finally:
                cus.close()
                conn.close()
    
        class myThread(threading.Thread):
            def __init__(self,id):
                threading.Thread.__init__(self)
                self.id = id
                pass
            def run(self):
    
                insert_DB()
                # print ("开始操作%s"%i)
    
        threads =[]
        tlock=threading.Lock()
        for  i in range(10):
            thread = myThread(i)
            threads.append(thread)
    
        for i in range(len(threads)):
            threads[i].start()
    
    
    # 计算程序的运行的时间
    def timeCostNum(start_time):
    
        end_time = datetime.datetime.now()
        spend_time = (end_time - start_time)
        print(spend_time)
        start_time = start_time.strftime("%Y-%m-%d %H:%M:%S")
        end_time = end_time.strftime("%Y-%m-%d %H:%M:%S")
        minutes = spend_time / 60
        second = spend_time // 60
        timeStr = str(minutes) + '分钟' + str(second) + "秒"
        print(timeStr)
    
    '''2. 线程操作数据+ 不同的数据'''
    def DifferentDataOnThreading():
        def insert_DB():
            conn = pymysql.connect(host='xx.xx.xxx.xxx', user='root', password="123456",
                                   database='xiancheng', port=3306,
                                   charset='utf8')
            cus= conn.cursor()
            try:
                for i in range(1000):
                    now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                    create_tm = datetime.datetime.strptime(now_str, '%Y-%m-%d %H:%M:%S')
                    sql=("INSERT INTO test_table VALUES ('%s','%s','%s')") % (i,i,create_tm)
                    # tlock.acquire()
                    ok = cus.execute(sql)
                    conn.commit()
                    print(i)
                    # tlock.release()
            except Exception as e:
                print ("one error happen",e)
            finally:
                cus.close()
                conn.close()
    
        def test_sql_insert(start,end):
            conn = pymysql.connect(host='xx.xx.xxx.xxx', user='root', password="123456",
                                   database='xiancheng', port=3306,
                                   charset='utf8')
            cus= conn.cursor()
            try:
                for i in range(start,end):
                    now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                    create_tm = datetime.datetime.strptime(now_str, '%Y-%m-%d %H:%M:%S')
                    sql=("INSERT INTO test_table VALUES ('%s','%s','%s')") % (i,i,create_tm)
                    # tlock.acquire()
                    ok = cus.execute(sql)
                    conn.commit()
                    # print(i)
                    # tlock.release()
            except Exception as e:
                print ("one error happen",e)
            finally:
                cus.close()
                conn.close()
    
        def insert_DB2(id):
            if id == 1:
                print(f'开启任===务- ={1}')
                # for i in range(200):
                #     print('111','== ',i)
                start = 0
                end = 100
                test_sql_insert(start, end)
            elif id == 2:
                print(f'开启任===务- ={2}')
                # for i in range(200):
                #     print('222','== ',i)
                start = 100
                end = 200
                test_sql_insert(start, end)
            elif id == 3:
                print(f'开启任===务- ={3}')
                # for i in range(200):
                #     print('333','== ',i)
                start = 200
                end = 300
                test_sql_insert(start, end)
            elif id == 4:
                print(f'开启任===务- ={4}')
                # for i in range(200):
                #     print('444','== ',i)
                start = 300
                end = 400
                test_sql_insert(start, end)
            elif id == 5:
                print(f'开启任===务- ={5}')
                # for i in range(200):
                #     print('555','== ',i)
                start = 400
                end = 500
                test_sql_insert(start, end)
            elif id == 6:
                print(f'开启任===务- ={6}')
                # for i in range(200):
                #     print('555','== ',i)
                start = 500
                end = 600
                test_sql_insert(start, end)
            elif id == 7:
                print(f'开启任===务- ={7}')
                # for i in range(200):
                #     print('555','== ',i)
                start = 600
                end = 700
                test_sql_insert(start, end)
            elif id == 8:
                print(f'开启任===务- ={8}')
                # for i in range(200):
                #     print('555','== ',i)
                start = 700
                end = 800
                test_sql_insert(start, end)
    
            elif id == 9:
                print(f'开启任===务- ={9}')
                # for i in range(200):
                #     print('555','== ',i)
                start = 800
                end = 900
                test_sql_insert(start, end)
    
            elif id == 0:
                print(f'开启任===务- ={10}')
                # for i in range(200):
                #     print('555','== ',i)
                start = 900
                end = 1000
                test_sql_insert(start, end)
    
        class myThread(threading.Thread):
            def __init__(self,id):
                threading.Thread.__init__(self)
                self.id = id
                pass
            def run(self):
    
                #insert_DB()
                # print(id)
                insert_DB2(i)
                print ("开始操作%s"%i)
    
        threads =[]
        tlock=threading.Lock()
        for  i in range(10):
            thread = myThread(i)
            threads.append(thread)
    
        for i in range(len(threads)):
            threads[i].start()
    
    if __name__ == '__main__':
        '''1. 只有线程操作数据,多任务'''
        start_time = datetime.datetime.now()
        onlyHaveThreading()
        # timeCostNum(start_time)
        '''insert_DB() 不传入id,只是重复插入数据啊,需要改造'''
    
        ''''''
        '''2. 线程操作数据+ 不同的数据 打印操作-debug模式'''
        # DifferentDataOnThreading()
        timeCostNum(start_time)
    
        '''
        1000
    no   0:00:45.412410
    yes  0:00:00.002991
        '''
    
    
    

    相关文章

      网友评论

          本文标题:python多线程写入数据到mysql中

          本文链接:https://www.haomeiwen.com/subject/prcmfdtx.html