




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第python使用多線程備份數(shù)據庫的步驟目錄一、為什么要用線程池二、線程池練習
演示例子1:使用submit方法演示例子2:使用map方法三、線上數(shù)據庫測試總結:
一、為什么要用線程池
1.多線程比單線程運行要快很多,比如在我工作中,每臺服務器至少8個庫以上,用單線程備份太慢了。
2.不是越多線程就會越好,而是根據服務器的資源來合理定義worker線程,否則會造成服務器嚴重負載,影響到線上業(yè)務。
3.備份數(shù)據庫都是消耗IO操作,用多線程比多進程稍微會更有優(yōu)勢。
從Python3.2開始,標準庫為我們提供了concurrent.futures模塊,它提供了ThreadPoolExecutor(線程池)和ProcessPoolExecutor(進程池)兩個類。
相比threading等模塊,該模塊通過submit返回的是一個future對象,它是一個未來可期的對象,通過它可以獲悉線程的狀態(tài)主線程(或進程)中可以獲取某一個線程(進程)執(zhí)行的狀態(tài)或者某一個任務執(zhí)行的狀態(tài)及返回值:
主線程可以獲取某一個線程(或者任務的)的狀態(tài),以及返回值。
當一個線程完成的時候,主線程能夠立即知道。
讓多線程和多進程的編碼接口一致。
二、線程池練習
演示例子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來獲取返回值
結果輸出:
task1:False
task2:False
task3:False
sleep1done
sleep2done
task1:True
task2:True
task3:False
sleep3done
使用with語句,通過ThreadPoolExecutor構造實例,同時傳入max_workers參數(shù)來設置線程池中最多能同時運行的線程數(shù)目。
使用submit函數(shù)來提交線程需要執(zhí)行的任務到線程池中,并返回該任務的句柄(類似于文件、畫圖),注意submit()不是阻塞的,而是立即返回。
通過使用done()方法判斷該任務是否結束。上面的例子可以看出,提交任務后立即判斷任務狀態(tài),顯示3個任務都未完成。在延時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
結果輸出:
task1:2
task2:3
task3:1
task4:4
fromconcurrent.futuresimportThreadPoolExecutor有兩種方式,一種是submit()函數(shù),另一種是map()函數(shù),兩者的主要區(qū)別在于:
1.map可以保證輸出的順序,submit輸出的順序是亂的
2.如果你要提交的任務的函數(shù)是一樣的,就可以簡化成map。但是假如提交的任務函數(shù)是不一樣的,或者執(zhí)行的過程之可能出現(xiàn)異常(使用map執(zhí)行過程中發(fā)現(xiàn)問題會直接拋出錯誤)就要用到submit()
3.submit和map的參數(shù)是不同的,submit每次都需要提交一個目標函數(shù)和對應的參數(shù),map只需要提交一次目標函數(shù),目標函數(shù)的參數(shù)放在一個迭代器(列表,字典)里就可以。
三、線上數(shù)據庫測試
環(huán)境:centos6,數(shù)據庫版本5.7,數(shù)據備份2個1.7G、一個800M、一個200M
第一種:shell腳本for的方式備份4個數(shù)據庫
#!/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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 區(qū)塊鏈技術在能源管理的創(chuàng)新應用
- 醫(yī)療數(shù)據合規(guī)管理與商業(yè)倫理
- 醫(yī)療健康服務的政策支持與可持續(xù)發(fā)展
- 建筑設備自動化總結模版
- 明癬的臨床護理
- 區(qū)塊鏈技術助力教育物資供應鏈的透明與高效
- 醫(yī)療信息化的安全保障措施研究
- 錄像課心得體會模版
- ST段抬高型心肌梗死的臨床護理
- 小兒消化性潰瘍的臨床護理
- 學校文化活動對兒童成長的影響研究
- 項目實施進度跟蹤與調整方案
- 2025屆湖北省武漢市高三英語質量檢測試卷(一模)(附答案)
- 【感恩話題】《永遠的感恩》感恩教育主題班會教案
- 自然語言處理與人工智能知到課后答案智慧樹章節(jié)測試答案2025年春中山大學
- 《BACnet基礎教程》課件
- 《重大交通事故案例分析》課件
- 綜合實踐 50有多大 抓抓數(shù)數(shù)(說課稿)-2024-2025學年一年級下冊數(shù)學蘇教版
- 《基于PLC的包裝機控制系統(tǒng)的設計與實現(xiàn)》10000字(論文)
- 2025年江蘇交通控股有限公司招聘筆試參考題庫含答案解析
- 2025年成都地鐵運營有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論