1. 程式人生 > 程式設計 >Python threading.local程式碼例項及原理解析

Python threading.local程式碼例項及原理解析

Python的執行緒操作在舊版本中使用的是thread模組,在Python27和Python3中引入了threading模組,同時thread模組在Python3中改名為_thread模組,threading模組相較於thread模組,對於執行緒的操作更加的豐富,而且threading模組本身也是相當於對thread模組的進一步封裝而成,thread模組有的功能threading模組也都有,所以涉及到對執行緒的操作,推薦使用threading模組。

threading模組中包含了關於執行緒操作的豐富功能,包括:常用執行緒函式,執行緒物件,鎖物件,遞迴鎖物件,事件物件,條件變數物件,訊號量物件,定時器物件,柵欄物件。程式碼如下

#coding = utf - 8
import threading# 建立全域性ThreadLocal物件:
	localVal = threading.local()
localVal.val = "Main-Thread"
def process_student():
	print '%s (in %s)' % (localVal.val,threading.current_thread().name)
def process_thread(name): #賦值
localVal.val = name
process_student()
t1 = threading.Thread(target =
	process_thread,args = ('One',),name = 'Thread-A')
t2 = threading.Thread(target =
	process_thread,args = ('Two',name = 'Thread-B')
t1.start()
t2.start()
t1.join()
t2.join()
print localVal.val

列印結果:

One (in Thread-A)
Two (in Thread-B)
Main-Thread

threading.local()這個方法的特點用來儲存一個全域性變數,但是這個全域性變數只有在當前執行緒才能訪問,

localVal.val = name這條語句可以儲存一個變數到當前執行緒,如果在另外一個執行緒裡面再次對localVal.val進行賦值,

那麼會在另外一個執行緒單獨建立記憶體空間來儲存,也就是說在不同的執行緒裡面賦值 不會覆蓋之前的值,因為每個

執行緒裡面都有一個單獨的空間來儲存這個資料,而且這個資料是隔離的,其他執行緒無法訪問

這個東西可以用在那些地方呢,比如下載,現在都是多執行緒下載了,就像酷狗那樣,可以同時下載很多首歌曲,那麼

就可以利用這個方法來儲存每個下載執行緒的資料,比如下載進度,下載速度之類的

所以 如果你在開發多執行緒應用的時候 需要每個執行緒儲存一個單獨的資料供當前執行緒操作,可以考慮使用這個方法,簡單有效

其實這樣的功能還有很多種方法可以實現,比如我們在主執行緒例項化一個dict物件,然後用執行緒的名字作為key,因為執行緒之間可以共享資料,

所以也可以實現相同功能,並且靈活性更多,不過程式碼就沒那麼優雅簡潔了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。