成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)

Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)

熱門標(biāo)簽:南陽(yáng)打電話機(jī)器人 地圖標(biāo)注自己和別人標(biāo)注區(qū)別 ai電銷機(jī)器人的優(yōu)勢(shì) 孝感營(yíng)銷電話機(jī)器人效果怎么樣 打電話機(jī)器人營(yíng)銷 聊城語(yǔ)音外呼系統(tǒng) 海外網(wǎng)吧地圖標(biāo)注注冊(cè) 騰訊地圖標(biāo)注沒(méi)法顯示 商家地圖標(biāo)注海報(bào)

多線程(連接池)操作MySQL插入數(shù)據(jù)

針對(duì)于此篇博客的收獲心得:

  • 首先是可以構(gòu)建連接數(shù)據(jù)庫(kù)的連接池,這樣可以多開啟連接,同一時(shí)間連接不同的數(shù)據(jù)表進(jìn)行查詢,插入,為多線程進(jìn)行操作數(shù)據(jù)庫(kù)打基礎(chǔ)
  • 多線程根據(jù)多連接的方式,需求中要完成多語(yǔ)言的入庫(kù)操作,我們可以啟用多線程對(duì)不同語(yǔ)言數(shù)據(jù)進(jìn)行并行操作
  • 在插入過(guò)程中,一條一插入,比較浪費(fèi)時(shí)間,我們可以把數(shù)據(jù)進(jìn)行積累,積累到一定的條數(shù)的時(shí)候,執(zhí)行一條sql命令,一次性將多條數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,節(jié)省時(shí)間cur.executemany

1.主要模塊

DBUtils : 允許在多線程應(yīng)用和數(shù)據(jù)庫(kù)之間連接的模塊套件
Threading : 提供多線程功能

2.創(chuàng)建連接池

PooledDB 基本參數(shù):

  • mincached : 最少的空閑連接數(shù),如果空閑連接數(shù)小于這個(gè)數(shù),Pool自動(dòng)創(chuàng)建新連接;
  • maxcached : 最大的空閑連接數(shù),如果空閑連接數(shù)大于這個(gè)數(shù),Pool則關(guān)閉空閑連接;
  • maxconnections : 最大的連接數(shù);
  • blocking : 當(dāng)連接數(shù)達(dá)到最大的連接數(shù)時(shí),在請(qǐng)求連接的時(shí)候,如果這個(gè)值是True,請(qǐng)求連接的程序會(huì)一直等待,直到當(dāng)前連接數(shù)小于最大連接數(shù),如果這個(gè)值是False,會(huì)報(bào)錯(cuò);
def mysql_connection():
    maxconnections = 15  # 最大連接數(shù)
    pool = PooledDB(
        pymysql,
        maxconnections,
        host='localhost',
        user='root',
        port=3306,
        passwd='123456',
        db='test_DB',
        use_unicode=True)
    return pool

# 使用方式
pool = mysql_connection()
con = pool.connection()

3.數(shù)據(jù)預(yù)處理

文件格式:txt

共準(zhǔn)備了四份虛擬數(shù)據(jù)以便測(cè)試,分別有10萬(wàn), 50萬(wàn), 100萬(wàn), 500萬(wàn)行數(shù)據(jù)

MySQL表結(jié)構(gòu)如下圖:

數(shù)據(jù)處理思路 :

  • 每一行一條記錄,每個(gè)字段間用制表符 “\t” 間隔開,字段帶有雙引號(hào);
  • 讀取出來(lái)的數(shù)據(jù)類型是 Bytes ;
  • 最終得到嵌套列表的格式,用于多線程循環(huán)每個(gè)任務(wù)每次處理10萬(wàn)行數(shù)據(jù);

格式 : [ [(A,B,C,D), (A,B,C,D),(A,B,C,D),…], [(A,B,C,D), (A,B,C,D),(A,B,C,D),…], [], … ]

import re
import time

st = time.time()
with open("10w.txt", "rb") as f:
    data = []
    for line in f:
        line = re.sub("\s", "", str(line, encoding="utf-8"))
        line = tuple(line[1:-1].split("\"\""))
        data.append(line)
    n = 100000  # 按每10萬(wàn)行數(shù)據(jù)為最小單位拆分成嵌套列表
    result = [data[i:i + n] for i in range(0, len(data), n)]
print("10萬(wàn)行數(shù)據(jù),耗時(shí):{}".format(round(time.time() - st, 3)))

# 10萬(wàn)行數(shù)據(jù),耗時(shí):0.374
# 50萬(wàn)行數(shù)據(jù),耗時(shí):1.848
# 100萬(wàn)行數(shù)據(jù),耗時(shí):3.725
# 500萬(wàn)行數(shù)據(jù),耗時(shí):18.493

4.線程任務(wù)

每調(diào)用一次插入函數(shù)就從連接池中取出一個(gè)鏈接操作,完成后關(guān)閉鏈接;
executemany 批量操作,減少 commit 次數(shù),提升效率;

def mysql_insert(*args):
    con = pool.connection()
    cur = con.cursor()
    sql = "INSERT INTO test(sku,fnsku,asin,shopid) VALUES(%s, %s, %s, %s)"
    try:
        cur.executemany(sql, *args)
        con.commit()
    except Exception as e:
        con.rollback()  # 事務(wù)回滾
        print('SQL執(zhí)行有誤,原因:', e)
    finally:
        cur.close()
        con.close()

5.啟動(dòng)多線程

代碼思路 :

設(shè)定最大隊(duì)列數(shù),該值必須要小于連接池的最大連接數(shù),否則創(chuàng)建線程任務(wù)所需要的連接無(wú)法滿足,會(huì)報(bào)錯(cuò) : pymysql.err.OperationalError: (1040, ‘Too many connections')循環(huán)預(yù)處理好的列表數(shù)據(jù),添加隊(duì)列任務(wù)如果達(dá)到隊(duì)列最大值 或者 當(dāng)前任務(wù)是最后一個(gè),就開始多線程隊(duì)執(zhí)行隊(duì)列里的任務(wù),直到隊(duì)列為空;

def task():
    q = Queue(maxsize=10)  # 設(shè)定最大隊(duì)列數(shù)和線程數(shù)
    # data : 預(yù)處理好的數(shù)據(jù)(嵌套列表)
    while data:
        content = data.pop()
        t = threading.Thread(target=mysql_insert, args=(content,))
        q.put(t)
        if (q.full() == True) or (len(data)) == 0:
            thread_list = []
            while q.empty() == False:
                t = q.get()
                thread_list.append(t)
                t.start()
            for t in thread_list:
                t.join()

6.完整示例

import pymysql
import threading
import re
import time
from queue import Queue
from DBUtils.PooledDB import PooledDB

class ThreadInsert(object):
    "多線程并發(fā)MySQL插入數(shù)據(jù)"
    def __init__(self):
        start_time = time.time()
        self.pool = self.mysql_connection()
        self.data = self.getData()
        self.mysql_delete()
        self.task()
        print("========= 數(shù)據(jù)插入,共耗時(shí):{}'s =========".format(round(time.time() - start_time, 3)))
        
    def mysql_connection(self):
        maxconnections = 15  # 最大連接數(shù)
        pool = PooledDB(
            pymysql,
            maxconnections,
            host='localhost',
            user='root',
            port=3306,
            passwd='123456',
            db='test_DB',
            use_unicode=True)
        return pool

    def getData(self):
        st = time.time()
        with open("10w.txt", "rb") as f:
            data = []
            for line in f:
                line = re.sub("\s", "", str(line, encoding="utf-8"))
                line = tuple(line[1:-1].split("\"\""))
                data.append(line)
        n = 100000    # 按每10萬(wàn)行數(shù)據(jù)為最小單位拆分成嵌套列表
        result = [data[i:i + n] for i in range(0, len(data), n)]
        print("共獲取{}組數(shù)據(jù),每組{}個(gè)元素.==>> 耗時(shí):{}'s".format(len(result), n, round(time.time() - st, 3)))
        return result

    def mysql_delete(self):
        st = time.time()
        con = self.pool.connection()
        cur = con.cursor()
        sql = "TRUNCATE TABLE test"
        cur.execute(sql)
        con.commit()
        cur.close()
        con.close()
        print("清空原數(shù)據(jù).==>> 耗時(shí):{}'s".format(round(time.time() - st, 3)))

    def mysql_insert(self, *args):
        con = self.pool.connection()
        cur = con.cursor()
        sql = "INSERT INTO test(sku, fnsku, asin, shopid) VALUES(%s, %s, %s, %s)"
        try:
            cur.executemany(sql, *args)
            con.commit()
        except Exception as e:
            con.rollback()  # 事務(wù)回滾
            print('SQL執(zhí)行有誤,原因:', e)
        finally:
            cur.close()
            con.close()

    def task(self):
        q = Queue(maxsize=10)  # 設(shè)定最大隊(duì)列數(shù)和線程數(shù)
        st = time.time()
        while self.data:
            content = self.data.pop()
            t = threading.Thread(target=self.mysql_insert, args=(content,))
            q.put(t)
            if (q.full() == True) or (len(self.data)) == 0:
                thread_list = []
                while q.empty() == False:
                    t = q.get()
                    thread_list.append(t)
                    t.start()
                for t in thread_list:
                    t.join()
        print("數(shù)據(jù)插入完成.==>> 耗時(shí):{}'s".format(round(time.time() - st, 3)))

if __name__ == '__main__':
    ThreadInsert()

插入數(shù)據(jù)對(duì)比

共獲取1組數(shù)據(jù),每組100000個(gè)元素.== >> 耗時(shí):0.374's
清空原數(shù)據(jù).== >> 耗時(shí):0.031's
數(shù)據(jù)插入完成.== >> 耗時(shí):2.499's
=============== 10w數(shù)據(jù)插入,共耗時(shí):3.092's ===============
共獲取5組數(shù)據(jù),每組100000個(gè)元素.== >> 耗時(shí):1.745's
清空原數(shù)據(jù).== >> 耗時(shí):0.0's
數(shù)據(jù)插入完成.== >> 耗時(shí):16.129's
=============== 50w數(shù)據(jù)插入,共耗時(shí):17.969's ===============
共獲取10組數(shù)據(jù),每組100000個(gè)元素.== >> 耗時(shí):3.858's
清空原數(shù)據(jù).== >> 耗時(shí):0.028's
數(shù)據(jù)插入完成.== >> 耗時(shí):41.269's
=============== 100w數(shù)據(jù)插入,共耗時(shí):45.257's ===============
共獲取50組數(shù)據(jù),每組100000個(gè)元素.== >> 耗時(shí):19.478's
清空原數(shù)據(jù).== >> 耗時(shí):0.016's
數(shù)據(jù)插入完成.== >> 耗時(shí):317.346's
=============== 500w數(shù)據(jù)插入,共耗時(shí):337.053's ===============

7.思考/總結(jié)

思考 :多線程+隊(duì)列的方式基本能滿足日常的工作需要,但是細(xì)想還是有不足;
例子中每次執(zhí)行10個(gè)線程任務(wù),在這10個(gè)任務(wù)執(zhí)行完后才能重新添加隊(duì)列任務(wù),這樣會(huì)造成隊(duì)列空閑.如剩余1個(gè)任務(wù)未完成,當(dāng)中空閑數(shù) 9,當(dāng)中的資源時(shí)間都浪費(fèi)了;
是否能一直保持隊(duì)列飽滿的狀態(tài),每完成一個(gè)任務(wù)就重新填充一個(gè).

 到此這篇關(guān)于Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python3 多線程插入MySQL數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python3 操作 MySQL 插入一條數(shù)據(jù)并返回主鍵 id的實(shí)例
  • python3實(shí)現(xiàn)往mysql中插入datetime類型的數(shù)據(jù)
  • 使用python3 實(shí)現(xiàn)插入數(shù)據(jù)到mysql
  • 解決python3插入mysql時(shí)內(nèi)容帶有引號(hào)的問(wèn)題
  • python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例
  • Python3.6-MySql中插入文件路徑,丟失反斜杠的解決方法

標(biāo)簽:聊城 楊凌 撫州 牡丹江 揚(yáng)州 迪慶 六盤水 南寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)》,本文關(guān)鍵詞  Python3,多,線程,連接,池,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    中文字幕五月欧美| 成人听书哪个软件好| 2020国产精品极品色在线观看| 日韩性感在线| 日韩精品成人在线| 全彩无遮挡全彩口工漫画h#| 日韩精品一区在线观看| 欧美性猛交xxxx富婆| 男女av免费观看| 久久久一二三区| 国产午夜精品理论片a级大结局| 91九色老女人| 中文字幕超清在线免费观看| 欧美日韩免费在线观看| 国产午夜免费视频| 538精品在线观看| 精品国产aⅴ一区二区三区东京热| 免费不卡在线视频| 亚洲一区在线视频观看| 国产亚洲欧洲高清一区| 久久婷婷国产91天堂综合精品| 国产美女视频网站| 亚洲成人一区二区三区| 欧洲性视频在线播放| 欧美成年人视频网站欧美| 日韩中文字幕久久| 亚洲精品乱码久久久久久动漫| 欧美酷刑日本凌虐凌虐| 爽成人777777婷婷| 亚洲伦理在线观看| 成人午夜av电影| 成人爽a毛片免费啪啪红桃视频| jizzyou欧美16| 亲子乱一区二区三区电影| 老司机免费视频一区二区| 欧美视频在线一区二区三区| 91国产精品91| 哪个网站能看毛片| brazzers精品成人一区| 国产亚洲精品资源在线26u| 老司机精品视频在线观看6| 国产精品18在线| 欧美乱大交xxxxx在线观看| 日韩加勒比系列| 国产精品午夜国产小视频| 国产成人无码av在线播放dvd| 99re8这里有精品热视频免费| 风间由美性色一区二区三区四区| 国产免费高清av| 中文字幕一区二区不卡| 中文成人激情娱乐网| 一本大道av伊人久久综合| 亚洲欧洲另类精品久久综合| 中文字幕久久精品一区二区| 国产精品久久久久久福利| 日韩av网站导航| av无码精品一区二区三区| 99久久久久久久| 色欲av永久无码精品无码蜜桃| 亚洲精品视频在线播放| 九色porn| 亚洲高清资源在线观看| 在线观看av免费观看| 中国china体内裑精亚洲片| 一本一本久久a久久精品牛牛影视| 久久久久国产精品一区| 九七电影院97理论片久久tvb| 蜜臀久久精品久久久久| www.99av.com| 国产精品美女久久久久久2018| 高清日韩欧美| 在线观看免费国产视频| 亚洲欧美自拍另类日韩| 一区二区三区精品视频在线| 欧美日韩精品免费| 国产精品我不卡| 欧美亚韩一区| 日韩视频专区| 国产在线视频精品一区| 母乳一区在线观看| 欧美性xxxxxbbbbbb精品| 777奇米四色成人影色区| 在线观看福利一区| 二区三区中文字幕| www.四虎成人| 欧美bbbbxxxx| 国产亚洲成精品久久| 伊人网伊人影院| 91国偷自产一区二区三区成为亚洲经典| 一本久道久久综合狠狠爱亚洲精品| 国内精品中文字幕| 久久躁狠狠躁夜夜爽| 亚洲h精品动漫在线观看| 免费日韩一区二区| 天天操天天爱天天干| 欧美日韩国产二区| 天天在线视频色| 性色av蜜臀av色欲av| 99国产在线| 日本一区二区三区网站| 在线一级观看| 91精品久久久久久久久久入口| 国产 国语对白 露脸| 潘金莲一级淫片aaaaaa播放| 中文字幕观看视频| 在线视频亚洲一区| 中文字幕第一页亚洲| 日日爽夜夜爽| 国产在线视频在线| 日韩成人免费在线观看| 久久久精彩视频| 日韩精品一区二区三区中文精品| 91网在线免费观看| 欧美激情一区在线| koreanbj精品视频一区| 久久久综合网站| 国产在线拍揄自揄视频不卡99| 校园春色另类视频| 中文国产一区| 久久久久久成人| 韩国视频一区| 亚洲视频1区2区| 国产河南妇女毛片精品久久久| 国产高潮在线| av大片免费观看| 一级片视频免费| 日日夜夜精品视频| 亚洲激情视频一区| 91精品国产91久久久久久最新| 国产一级在线免费观看| 在线a免费看| 亚洲国产精品99久久久久久久久| 性欧美长视频免费观看不卡| 色哟哟网站入口亚洲精品| 午夜精品一区二区三区国产| 一区二区毛片| 国产精品91免费在线| 91国产中文字幕| 日本激情视频在线| 欧美成人免费全部观看天天性色| 欧美xxxbbb| 韩国女主播成人在线观看| 国产精品专区第二| 97久久国产精品| 日韩欧美在线观看免费| 新婚的少妇hd中文字幕| 91丨porny丨在线中文| 成人免费在线播放视频| 视频在线观看一区二区| 欧美日韩三区| 免费看岛国视频在线观看| 91视频在线网站| 国产一区2区| 亚洲精品日韩在线观看| 香蕉521av成人网| 黄网免费视频| 日本中文字幕免费| 免费成人高清在线视频| 草莓视频18免费观看| 亚洲少妇视频| 日韩精品一区二区三区久久| 日韩三级在线观看| 国产毛片久久| 在线女人免费视频| 国产理论片免费观看| 亚洲最大av在线| 国产成人av电影在线| 欧美精品色视频| 136国产福利精品导航网址| 午夜激情久久| 欧美性xxxx69| 欧美亚洲丝袜| 成人激情校园春色| 波多野结衣大片| 日日夜夜精品视频免费观看| 一级黄色录像毛片| 国产精品久久久久久亚洲色| 亚洲av无一区二区三区| 麻豆传媒免费在线观看| 亚洲色图35p| 久久精品偷拍视频| 精品人妻一区二区三区浪潮在线| 青青草97国产精品免费观看| 欧美精品在线播放| www.国产在线视频| 亚洲一区二区三区精品动漫| 青青久在线视频免费观看| 亚洲精品九九| 国产偷国产偷亚洲清高网站| 亚洲自拍偷拍一区二区三区| 日韩电影在线看| 国产99久久久精品| 日韩高清不卡在线| 少妇bbbb搡bbbb| 白浆爆出在线观看| 91久久久久久白丝白浆欲热蜜臀| 上原亚衣av一区二区三区| 爱情电影网av一区二区| 国模精品一区二区| 久久77777| 亚洲综合自拍一区| 免费在线精品视频| 国产一区久久| 成年人深夜福利| 中文视频一区视频二区视频三区| 9191精品国产综合久久久久久| 老司机久久99久久精品播放免费| 精品视频一区二区三区免费| 中文字幕精品无码亚| av电影免费在线看| 在线 丝袜 欧美 日韩 制服| 亚洲精品视频中文字幕| 亚洲视频在线观看不卡| 久久99国产精一区二区三区| 在线亚洲午夜片av大片| 色佬视频在线观看| 国产露出视频在线观看| 免费涩涩18网站入口| 国产区二精品视| 蜜桃视频动漫在线播放| 亚洲欧美日韩国产成人| 97国产精品久久久| 欧美日韩在线免费观看| 欧美三级日本三级少妇99| 亚洲第一区视频| 免费黄色网网址| 亚洲毛茸茸少妇高潮呻吟| h片在线观看下载| 懂色av懂色av粉嫩av| 亚洲精品www| 国产女人水真多18毛片18精品视频| 国产偷窥老熟盗摄视频| a天堂中文在线官网在线| 8×8x拔擦拔擦在线视频网站| 国产欧美一区二区三区小说| 中文字幕影音在线| 狠狠综合久久av一区二区老牛| h网站在线播放| 蜜桃av成人| 国产亚洲一区二区在线| jizz视频| 国产二区精品| 九九热爱视频精品视频高清| 中文字幕在线一| 日韩免费视频一区二区| 精品国产美女福利到在线不卡| 天堂中文在线观看视频| 中文字幕乱码亚洲精品一区| 国产性生活毛片| 色88久久久久高潮综合影院| 日本黄色播放器| 久久成人资源| 欧美日韩亚洲一区| 日韩在线观看免费| 欧美精品xxx| 成人精品一区二区三区电影免费| 亚洲第一天堂网| 国产精品亚洲欧美一级在线| 欧美高清xxxxxkkkkk| 国产精品一区二区三区观看| 一区二区 亚洲| 一区二区不卡免费视频| 欧美日韩激情美女| 天堂资源在线中文| 拍真实国产伦偷精品| 粉嫩粉嫩芽的虎白女18在线视频| 丝袜美腿一区二区三区动态图| 国产日韩欧美中文在线| www.操操操| 久久资源中文字幕| xfplay爱情电影网love| 91亚洲国产成人久久精品麻豆| 狠狠躁少妇一区二区三区| 福利在线一区二区三区| 88av看到爽| 小视频在线播放| 久久精品人成| 国产日韩在线免费观看| 欧美日韩在线免费观看视频| 精品久久久久av| 日批在线观看视频| 黄色三级网站| 亚洲午夜久久| 新天天拍日日拍狠狠拍| 蜜桃精品一区二区| 一区二区亚洲精品国产| 亚洲国产综合网| 性欧美ⅴideo另类hd| 欧美系列精品| 中文字幕先锋av影音资源网| 无套内谢大学处破女www小说| 999热视频在线观看| 成人三级伦理片| 精品99又大又爽又硬少妇毛片| shkd中文字幕久久在线观看| 国产欧美一区二区三区久久| 亚洲成人免费看| 亚洲第一福利专区| www..com.cn蕾丝视频在线观看免费版| 日本黄色免费在线观看| 97精品国产97久久久久久久久久久久| 激情婷婷欧美| 国产精品久久久久影院日本| 男女啪啪a级毛片| 日本韩国欧美在线观看| 精品国产高清自在线一区二区三区| hitomi一区二区三区精品| av超碰在线观看| 在线观看日韩中文字幕| 中文字幕麻豆| 欧美三日本三级三级在线播放| 啊啊啊啊啊啊啊视频在线播放| 先锋影音av中文资源| 91社区在线观看播放| 亚洲欧美精品中文字幕在线| 中文字幕 日韩有码| 日本三级一区二区| 精品www久久久久奶水| 亚洲福利在线观看| 国产成人亚洲精品播放器下载| 三上悠亚亚洲一区| 国产精品jvid在线观看| 影音先锋中文字幕在线观看| 色资源在线观看| 同心难改在线观看| 国产伦精品一区二区三区免费优势| 成人免费视频一区| 要久久爱电视剧全集完整观看|