




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第python使用多線程備份數(shù)據(jù)庫的步驟目錄一、為什么要用線程池二、線程池練習(xí)
演示例子1:使用submit方法演示例子2:使用map方法三、線上數(shù)據(jù)庫測試總結(jié):
一、為什么要用線程池
1.多線程比單線程運行要快很多,比如在我工作中,每臺服務(wù)器至少8個庫以上,用單線程備份太慢了。
2.不是越多線程就會越好,而是根據(jù)服務(wù)器的資源來合理定義worker線程,否則會造成服務(wù)器嚴(yán)重負(fù)載,影響到線上業(yè)務(wù)。
3.備份數(shù)據(jù)庫都是消耗IO操作,用多線程比多進程稍微會更有優(yōu)勢。
從Python3.2開始,標(biāo)準(zhǔn)庫為我們提供了concurrent.futures模塊,它提供了ThreadPoolExecutor(線程池)和ProcessPoolExecutor(進程池)兩個類。
相比threading等模塊,該模塊通過submit返回的是一個future對象,它是一個未來可期的對象,通過它可以獲悉線程的狀態(tài)主線程(或進程)中可以獲取某一個線程(進程)執(zhí)行的狀態(tài)或者某一個任務(wù)執(zhí)行的狀態(tài)及返回值:
主線程可以獲取某一個線程(或者任務(wù)的)的狀態(tài),以及返回值。
當(dāng)一個線程完成的時候,主線程能夠立即知道。
讓多線程和多進程的編碼接口一致。
二、線程池練習(xí)
演示例子1:使用submit方法
fromconcurrent.futuresimportThreadPoolExecutor
importtime
deftest_thread(sec):
time.sleep(sec)
print(f"sleep{sec}done")
returnsec
withThreadPoolExecutor(max_workers=4)ast:#創(chuàng)建一個最大容納數(shù)量為4的線程池
task1=t.submit(test_thread,1)
task2=t.submit(test_thread,2)#通過submit提交執(zhí)行的函數(shù)到線程池中
task3=t.submit(test_thread,3)
print(f"task1:{task1.done()}")#通過done來判斷線程是否完成
print(f"task2:{task2.done()}")
print(f"task3:{task3.done()}")
time.sleep(2.5)
print(f"task1:{task1.done()}")
print(f"task2:{task2.done()}")
print(f"task3:{task3.done()}")
print(task1.result())#通過result來獲取返回值
結(jié)果輸出:
task1:False
task2:False
task3:False
sleep1done
sleep2done
task1:True
task2:True
task3:False
sleep3done
使用with語句,通過ThreadPoolExecutor構(gòu)造實例,同時傳入max_workers參數(shù)來設(shè)置線程池中最多能同時運行的線程數(shù)目。
使用submit函數(shù)來提交線程需要執(zhí)行的任務(wù)到線程池中,并返回該任務(wù)的句柄(類似于文件、畫圖),注意submit()不是阻塞的,而是立即返回。
通過使用done()方法判斷該任務(wù)是否結(jié)束。上面的例子可以看出,提交任務(wù)后立即判斷任務(wù)狀態(tài),顯示3個任務(wù)都未完成。在延時2.5后,task1和task2執(zhí)行完畢,task3仍在執(zhí)行中。
演示例子2:使用map方法
importtime
fromconcurrent.futuresimportThreadPoolExecutor
defspider(page):
time.sleep(page)
returnpage
start=time.time()
executor=ThreadPoolExecutor(max_workers=4)
i=1
forresultinexecutor.map(spider,[2,3,1,4]):
print("task{}:{}".format(i,result))
i+=1
結(jié)果輸出:
task1:2
task2:3
task3:1
task4:4
fromconcurrent.futuresimportThreadPoolExecutor有兩種方式,一種是submit()函數(shù),另一種是map()函數(shù),兩者的主要區(qū)別在于:
1.map可以保證輸出的順序,submit輸出的順序是亂的
2.如果你要提交的任務(wù)的函數(shù)是一樣的,就可以簡化成map。但是假如提交的任務(wù)函數(shù)是不一樣的,或者執(zhí)行的過程之可能出現(xiàn)異常(使用map執(zhí)行過程中發(fā)現(xiàn)問題會直接拋出錯誤)就要用到submit()
3.submit和map的參數(shù)是不同的,submit每次都需要提交一個目標(biāo)函數(shù)和對應(yīng)的參數(shù),map只需要提交一次目標(biāo)函數(shù),目標(biāo)函數(shù)的參數(shù)放在一個迭代器(列表,字典)里就可以。
三、線上數(shù)據(jù)庫測試
環(huán)境:centos6,數(shù)據(jù)庫版本5.7,數(shù)據(jù)備份2個1.7G、一個800M、一個200M
第一種:shell腳本for的方式備份4個數(shù)據(jù)庫
#!/bin/bash
backup_path="/data/backup/"
myuser="root"
mypwd="123456"
db_name="test_1000"
current_time=$(date+%Y%m%d%H%M%S)
foriin$(seq4);do
/usr/local/mysql/bin/mysqldump-u${myuser}-p${mypwd}--single-transaction--master-data=2--set-gtid-purged=off"${db_name}${i}"|gzip${backup_path}/"${db_name}${i}"_${current_t
ime}.sql.gz
done
查看執(zhí)行時間
mysqldump:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
mysqldump:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
mysqldump:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
mysqldump:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
real4m28.421s
user3m50.360s
sys0m5.962s
第二種方式:多線程備份
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何備戰(zhàn)2025年公務(wù)員筆試試卷及答案
- 2025年食品安全與質(zhì)量管理考試試卷及答案
- 2025年自然語言處理專業(yè)考試試卷及答案
- 2025年城市地理學(xué)考試試題及答案剖析
- 高品質(zhì)數(shù)字調(diào)音臺網(wǎng)絡(luò)直播音效庫租賃及售后支持協(xié)議
- 執(zhí)業(yè)醫(yī)師與醫(yī)療機構(gòu)醫(yī)療培訓(xùn)合作協(xié)議
- 美團餐飲店鋪線上會員體系建立與運營合同
- 創(chuàng)新型企業(yè)股權(quán)并購融資專項合作協(xié)議
- 抖音直播推動鄉(xiāng)村產(chǎn)業(yè)融合發(fā)展合作協(xié)議
- 高效商標(biāo)續(xù)展專業(yè)代理服務(wù)合同
- 廣東2025年廣東省生物制品與藥物研究所招聘12人筆試歷年參考題庫附帶答案詳解
- 2024北京西城區(qū)五年級(下)期末英語試題及答案
- 《古埃及文明》課件
- 歷屆全國初中應(yīng)用物理知識競賽匯編
- 國企筆試招聘題目
- 醫(yī)院培訓(xùn)課件:《西門子Syngo.via工作站的臨床應(yīng)用》
- 企業(yè)刑事合規(guī)培訓(xùn)課件
- 訂做門合同協(xié)議范本
- 2025年新版《保障中小企業(yè)款項支付條例》解讀學(xué)習(xí)課件
- 學(xué)校文化活動對兒童成長的影響研究
- 項目實施進度跟蹤與調(diào)整方案
評論
0/150
提交評論