国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 大批量寫入數(shù)據(jù) 百萬級別

這篇具有很好參考價值的文章主要介紹了Python 大批量寫入數(shù)據(jù) 百萬級別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

	現(xiàn)有一個百萬行數(shù)據(jù)的csv格式文件,需要在兩分鐘之內(nèi)存入數(shù)據(jù)庫。

方案

	方案一:多線程+協(xié)程+異步MySql
	方案二:多線程+MySql批量插入

代碼

	1,先通過pandas讀取所有csv數(shù)據(jù)存入列表。
	2,設置N個線程,將一百萬數(shù)據(jù)均分為N份,以start,end傳遞給線程以切片的方法讀取區(qū)間數(shù)據(jù)(建議為16個線程)
	3,方案二 線程內(nèi)以  executemany 方法批量插入所有數(shù)據(jù)。
	4,方案一 線程內(nèi)使用異步事件循環(huán)遍歷所有數(shù)據(jù)異步插入。 
	5,方案一純屬沒事找事型。

方案二

import threading

import pandas as pd
import asyncio
import time

import aiomysql
import pymysql

data=[]
error_data=[]


def run(start,end):
    global data
    global error_data
    print("start"+threading.current_thread().name)
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    mysdb = getDb("*", *, "*", "*", "*")
    cursor = mysdb.cursor()
    sql = """insert into *_*_* values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
    cursor.executemany(sql,data[start:end])
    mysdb.commit()
    mysdb.close()
    print("end" + threading.current_thread().name)
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))


def csv_file_read_use_pd(csvFile):
    csv_result = pd.read_csv(csvFile,encoding="utf-16",sep='\t')
    csv_result = csv_result.fillna(value="None")
    result = csv_result.values.tolist()
    return result


class MyDataBase:
    def __init__(self,host=None,port=None,username=None,password=None,database=None):
        self.db = pymysql.connect(host=host,port=port,user=username,password=password,database=database)
    def close(self):
        self.db.close()

def getDb(host,port,username,password,database):
    MyDb = MyDataBase(host, port, username, password,database)
    return MyDb.db

def main(csvFile):
    global data  #獲取全局對象  csv全量數(shù)據(jù)
    #讀取所有的數(shù)據(jù)   將所有數(shù)據(jù)均分成   thread_lens   份 分發(fā)給  thread_lens  個線程去執(zhí)行
    thread_lens=20
    csv_result=csv_file_read_use_pd(csvFile)
    day = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    for item in csv_result:
        item.insert(0,day)

    data=csv_result
    thread_exe_count_list=[]   #線程需要執(zhí)行的區(qū)間
    csv_lens=len(csv_result)
    avg = csv_lens // thread_lens
    remainder=csv_lens % thread_lens
    # 0,27517  27517,55,034
    nowIndex=0
    for i in range(thread_lens):
        temp=[nowIndex,nowIndex+avg]
        nowIndex=nowIndex+avg
        thread_exe_count_list.append(temp)
    thread_exe_count_list[-1:][0][1]+=remainder  #余數(shù)分給最后一個線程
    # print(thread_exe_count_list)

    #th(thread_exe_count_list[0][0],thread_exe_count_list[0][1])

    for i in range(thread_lens):
        sub_thread = threading.Thread(target=run,args=(thread_exe_count_list[i][0],thread_exe_count_list[i][1],))
        sub_thread.start()
        sub_thread.join()
        time.sleep(3)


if __name__=="__main__":
    #csv_file_read_use_pd("分公司箱型箱量.csv")
    main("分公司箱型箱量.csv")

方案一文章來源地址http://www.zghlxwxcb.cn/news/detail-515875.html

import threading

import pandas as pd
import asyncio
import time

import aiomysql


data=[]
error_data=[]


async def async_basic(loop,start,end):
    global data
    global error_data
    print("start"+threading.current_thread().name)
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    conn = await aiomysql.connect(
        host="*",
        port=*,
        user="*",
        password="*",
        db="*",
        loop=loop
    )
    day = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    sql = """insert into **** values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
    async with conn.cursor() as cursor:
        for item in data[start:end]:
            params=[day]
            params.extend(item)
            try:
                x=await cursor.execute(sql,params)
                if x==0:
                    error_data.append(item)
                print(threading.current_thread().name+"   result "+str(x))
            except Exception as e:
                print(e)
                error_data.append(item)
                time.sleep(10)
                pass
    await conn.close()
    #await conn.commit()
    #關閉連接池
    # pool.close()
    # await pool.wait_closed()
    print("end" + threading.current_thread().name)
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))


def csv_file_read_use_pd(csvFile):
    csv_result = pd.read_csv(csvFile,encoding="utf-16",sep='\t')
    csv_result = csv_result.fillna(value="None")
    result = csv_result.values.tolist()
    return result

def th(start,end):
    loop = asyncio.new_event_loop()
    loop.run_until_complete(async_basic(loop,start,end))


def main(csvFile):
    global data  #獲取全局對象  csv全量數(shù)據(jù)
    #讀取所有的數(shù)據(jù)   將所有數(shù)據(jù)均分成   thread_lens   份 分發(fā)給  thread_lens  個線程去執(zhí)行
    thread_lens=20
    csv_result=csv_file_read_use_pd(csvFile)
    data=csv_result
    thread_exe_count_list=[]   #線程需要執(zhí)行的區(qū)間
    csv_lens=len(csv_result)
    avg = csv_lens // thread_lens
    remainder=csv_lens % thread_lens
    # 0,27517  27517,55,034
    nowIndex=0
    for i in range(thread_lens):
        temp=[nowIndex,nowIndex+avg]
        nowIndex=nowIndex+avg
        thread_exe_count_list.append(temp)
    thread_exe_count_list[-1:][0][1]+=remainder  #余數(shù)分給最后一個線程
    print(thread_exe_count_list)

    #th(thread_exe_count_list[0][0],thread_exe_count_list[0][1])

    for i in range(thread_lens):
        sub_thread = threading.Thread(target=th,args=(thread_exe_count_list[i][0],thread_exe_count_list[i][1],))
        sub_thread.start()
        time.sleep(3)


if __name__=="__main__":
    #csv_file_read_use_pd("分公司箱型箱量.csv")
    main("分公司箱型箱量.csv")

到了這里,關于Python 大批量寫入數(shù)據(jù) 百萬級別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • elasticsearch刪除大批量數(shù)據(jù)方法

    一般回用如下: 示例: 如果刪除任務完成了,返回如下: 數(shù)據(jù)查詢?nèi)蝿眨?/p>

    2024年02月12日
    瀏覽(27)
  • python request大批量發(fā)送請求調(diào)用接口時,報錯:[WinError 10048] 通常每個套接字地址(協(xié)議/網(wǎng)絡地址/端口)只允許使用一次。

    python request大批量發(fā)送請求調(diào)用接口時,報錯:[WinError 10048] 通常每個套接字地址(協(xié)議/網(wǎng)絡地址/端口)只允許使用一次。

    接到一個項目需求,其中需要調(diào)用到供應商的Http? API,因為有大量的測試資源,所以代碼中會循環(huán)調(diào)用API。 然而在測試代碼執(zhí)行過程中,過程中偶爾報錯: ?此時看到報錯,懷疑是可能是同時并發(fā)的問題, 但實際上并未對該接口進行限制,所以應該不是這個的問題,?進一

    2023年04月10日
    瀏覽(91)
  • Jmeter(三十一):制造大批量的用戶數(shù)據(jù)數(shù)據(jù)

    Jmeter(三十一):制造大批量的用戶數(shù)據(jù)數(shù)據(jù)

    需求:因測試需要,要造100w用戶數(shù)據(jù),通過用戶名、手機號、密碼可新增用戶,其中用戶名和電話號碼要求100w用戶不能重復 要點: 1、通過Bean shell Sampler實現(xiàn)用戶名和手機號的足夠隨機。 符合我們常用規(guī)則的手機號:第一位為1,第二位為3-9,后面的9位為0-9即可。 phone=${_

    2024年02月10日
    瀏覽(25)
  • MySQL---使用索引優(yōu)化、大批量插入數(shù)據(jù)優(yōu)化

    MySQL---使用索引優(yōu)化、大批量插入數(shù)據(jù)優(yōu)化

    1. 使用索引優(yōu)化 索引是數(shù)據(jù)庫優(yōu)化最常用也是最重要的手段之一 , 通過索引通常可以幫助用戶解決大多數(shù)的 MySQL 的性能優(yōu)化問題: 1.1?避免索引失效應用-全值匹配 該情況下,索引生效,執(zhí)行效率高。 1.2?避免索引失效應用-最左前綴法則 1.3?避免索引失效應用-其他匹配原則

    2024年02月07日
    瀏覽(24)
  • redis 無占用 兩種方式 清除大批量數(shù)據(jù) lua腳本

    redis存儲了很多無用的key,占用了大量內(nèi)存,需要清除 第一種 (顆粒度較大) lua腳本,刪除某些規(guī)則的key,輸入刪除的key,返回刪除的符合規(guī)則的key的數(shù)量 弊端:顆粒度比較大,發(fā)送一個lua腳本去執(zhí)行,會占用較多時間,堵塞其他redis命令 java代碼 這樣直接刪除,因為規(guī)則有很

    2024年04月28日
    瀏覽(24)
  • 大批量數(shù)據(jù)導出csv,平替導出excel性能優(yōu)化解決方案封裝工具類

    ? ? ? ? 有些業(yè)務邏輯需要在導出非常大量的數(shù)據(jù),幾百甚至幾千萬的數(shù)據(jù)這個時候再導出excel來對于性能都不是很友好,這個時候就需要替換實現(xiàn)思路來解決這個問題。 ? ? ? ? 本文章提供了兩種解決的方案,也是兩種從數(shù)據(jù)庫中拿取數(shù)據(jù)的方式一種是原生的jdbc一種是使用

    2024年01月16日
    瀏覽(26)
  • 【sgTransfer】自定義組件:帶有翻頁、頁碼、分頁器的穿梭框組件,支持大批量數(shù)據(jù)的穿梭顯示。

    【sgTransfer】自定義組件:帶有翻頁、頁碼、分頁器的穿梭框組件,支持大批量數(shù)據(jù)的穿梭顯示。

    ? 特性: ? 表格寬度可以自定義 翻頁器顯示控件可以自定義 列配置項可以設置顯示字段列名稱、寬度、字段名 可以配置搜索框提示文本,支持搜索過濾 穿梭框頂部標題可以自定義 左右箭頭按鈕文本可以設置

    2024年02月10日
    瀏覽(21)
  • cesium實現(xiàn)大批量POI點位聚合渲染優(yōu)化方案

    cesium實現(xiàn)大批量POI點位聚合渲染優(yōu)化方案

    cesium目前只提供了entityCluster這個聚合類,使打點聚合更方便快捷的實現(xiàn),但是一般在真正做項目的時候,大家會經(jīng)常碰到成千上萬個甚至幾十萬個點位需要聚合打點,那這時候你如果還是用entity去實現(xiàn)的話,怕是要被用戶按在地上瘋狂摩擦,摩擦。。。?? 我們可以通過模擬

    2024年02月09日
    瀏覽(21)
  • 遠程運維大批量IT設備?向日葵批量部署、分組授權與安全功能解析

    遠程運維大批量IT設備?向日葵批量部署、分組授權與安全功能解析

    數(shù)字化轉型的不斷推進,給予了企業(yè)全方位的賦能,但任何發(fā)展都伴隨著成本與代價,比如在數(shù)字化轉型過程中企業(yè)內(nèi)部辦公與外部業(yè)務所需的不斷增加的IT設備數(shù)量,就為日常的運維工作提出了更大的挑戰(zhàn)。 針對企業(yè)面對海量IT設備時的運維難、效率低、容易出錯等問題,

    2024年02月14日
    瀏覽(22)
  • 使用postman做接口測試傳入大批量動態(tài)參數(shù)的方法

    使用postman做接口測試傳入大批量動態(tài)參數(shù)的方法

    postman是一個非常好用的接口測試工具,而且功能也很強大,今天只簡單說一下使用postman如何對一個接口傳入大批量參數(shù)進行測試的方法。 以我測試的平臺為例,我們的平臺是做在線教育平臺的,我模擬的場景是老師有一門課叫ABC,現(xiàn)在需要有1000個學生加入ABC這門課。我們不

    2024年01月23日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包