您好,登錄后才能下訂單哦!
這篇文章主要介紹“python中ThreadLocal的作用是什么”,在日常操作中,相信很多人在python中ThreadLocal的作用是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python中ThreadLocal的作用是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
ThreadLocal在threading模塊中,可以見得它是為我們的線程服務的。
它的主要作用是存儲當前線程的變量,各個線程之間的變量名是可以相同的,但是線程之間的變量是隔離的,也就是每個線程有自己的變量副本,互不干擾。
ThreadLocal為每個線程提供 get() 或 set() 方法來創建獨立初始化的變量副本。
ThreadLocal的工作原理可以理解為:ThreadLocal變量相當于一個字典,字典的第一個key是線程id,每個線程的變量存儲到自己id的字典里,結構可以想象成如下:
local = { 131443: { # 線程id "name": "線程1", # 線程變量 "age": 10, # 線程變量 "status": 1 # 線程變量 } }
看下面一個例子:
import threading local = threading.local() def func(): print(f"id:{local.id},name:{local.name},num:{local.num}") def run(num): local.id = threading.current_thread().ident local.name = threading.current_thread().name local.num = num func() if __name__ == "__main__": t1 = threading.Thread(target=run, args=(1,)) t2 = threading.Thread(target=run, args=(2,)) t1.start() t2.start() t1.join() t2.join()
執行結果如下:
id:13022343168,name:Thread-1,num:1
id:13039132672,name:Thread-2,num:2
可以看到,在線程里,我們可以直接使用local點來獲取各自的變量,每個線程的變量是隔離的。
那么ThreadLocal有什么用呢?
線程間的數據隔離
進行事務操作,存儲線程事務信息
數據庫連接、Session會話管理
在進行對象跨層傳遞時,打破層次間的約束
例如Flask中請求上下文對象,就是對ThreadLocal進一步封裝,它能夠存儲每個請求的請求參數和其他變量,各請求線程之間數據隔離。
到此,關于“python中ThreadLocal的作用是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。