
Python中多線程的創建及基本調用方法
1. 多線程的作用
簡而言之,多線程是并行處理相互獨立的子任務,從而大幅度提高整個任務的效率。
2. Python中的多線程相關模塊和方法
Python中提供幾個用于多線程編程的模塊,包括thread,threading和Queue等
thread模塊提供了基本的線程和鎖的支持,除產生線程外,也提供基本的同步數據結構鎖對象,其中包括:
start_new_thread(function, args kwargs=None) 產生一個新的線程來運行給定函數
allocate_lock() 分配一個LockType類型的鎖對象
exit() 讓線程退出
acquire(wait=None) 嘗試獲取鎖對象
locked() 如果獲取了鎖對象返回TRUE,否則返回FALSE
release() 釋放鎖
threading提供了更高級別,功能更強的線程管理功能
Thread類 表示一個線程的執行的對象
Lock 鎖原語對象
RLock 可重入鎖對象,使單線程可以再次獲得已經獲取鎖
queue模塊允許用戶創建一個可以用于多個線程之間共享數據的隊列數據結構
可用于進程間的通訊,讓各個線程之間共享數據
模塊函數queue(size) 創建一個大小為size的Queue對象
queue對象函數 qsize() 返回隊列大小
empty() 隊列為空返回True,否則返回False
put(item, block=0) 把ITEM放到隊列中,block不為0,函數會一直阻塞到隊列中
get(block=0) 從隊列中取一個對象,若果給block,函數會一直阻塞到隊列中有對象為止
3.示例
目前Python的lib中對多線程編程提供兩種啟動方法,一種是比較基本的thread模塊中start_new_thread方法,在線程中運行一個函數, 另一種是使用集成threading模塊的線程對象Thread類。
目前所用到的,是舊版本中調用thread模塊中的start_new_thread()函數來產生新的線程
相比而言,thread.start_new_thread(function,(args[,kwargs]))實現機制其實與C更為類似,其中function參數是將要調用的線程函數;(args[,kwargs])是將傳遞給待創建線程函數的參數組成的元組類型,其中kwargs是可選的參數。新創建的線程結束一般依靠線程函數的執行結束自動退出,或者在線程函數中調用thread.exit()拋出SystemExit
exception,達到線程退出的目的。
print "=======================thread.start_new_thread啟動線程============="
import thread
#Python的線程sleep方法并不是在thread模塊中,反而是在time模塊下
import time
def inthread(no,interval):
count=0
while count<10:
print "Thread-%d,休眠間隔:%d,current Time:%s"%(no,interval,time.ctime())
#使當前線程休眠指定時間,interval為浮點型的秒數,不同于Java中的整形毫秒數
time.sleep(interval)
#Python不像大多數高級語言一樣支持++操作符,只能用+=實現
count+=1
else:
print "Thread-%d is over"%no
#可以等待線程被PVM回收,或主動調用exit或exit_thread方法結束線程
thread.exit_thread()
#使用start_new_thread函數可以簡單的啟動一個線程,第一個參數指定線程中執行的函數,第二個參數為元組型的傳遞給指定函數的參數值
thread.start_new_thread(inthread,(1,2))
#線程執行時必須添加這一行,并且sleep的時間必須足夠使線程結束,如本例
#如果休眠時間改為20,將可能會拋出異常
time.sleep(30)
'''
使用這種方法啟動線程時,有可能出現異常
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
解決:啟動線程之后,須確保主線程等待所有子線程返回結果后再退出,如果主線程比子線程早結束,無論其子線程是否是后臺線程,都將會中斷,拋出這個異常
若沒有響應阻塞等待,為避免主線程提前退出,必須調用time.sleep使主線程休眠足夠長的時間,另外也可以采用加鎖機制來避免類似情況,通過在啟動線程的時候,給每個線程都加了一把鎖,直到線程運行介紹,再釋放這個鎖。同時在Python的main線程中用一個while循環來不停的判斷每個線程鎖已釋放。
import thread;
from time import sleep,ctime;
from random import choice
#The first param means the thread number
#The second param means how long it sleep
#The third param means the Lock
def loop(nloop,sec,lock):
print "Thread ",nloop," start and will sleep ",sec;
sleep(sec);
print "Thread ",nloop," end ",sec;
lock.release();
def main():
seconds=[4,2];
locks=[];
for i in range(len(seconds)) :
lock=thread.allocate_lock();
lock.acquire();
locks.append(lock);
print "main Thread begins:",ctime();
for i,lock in enumerate(locks):
thread.start_new_thread(loop,(i,choice(seconds),lock));
for lock in locks :
while lock.locked() :
pass;
print "main Thread ends:",ctime();
if __name__=="__main__" :
main();
很多介紹說在新python版本中推薦使用Threading模塊,目前暫沒有應用到。。。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
2025 年,數據如同數字時代的 DNA,編碼著人類社會的未來圖景,驅動著商業時代的運轉。從全球互聯網用戶每天產生的2.5億TB數據, ...
2025-05-27CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25