執行緒隔離的原理就是通過字典儲存資料,每乙個執行緒都將自己的執行緒號作為key,request請求物件的返回值作為value
werkzeug庫裡面的local模組封裝了乙個local物件,基於字典實現的執行緒隔離物件
importthreading
import
time
from werkzeug.local import
local
obj =local()
obj.b = 1
defworker_1():
obj.b = 2
print('
current thread b is:
' +str(obj.b))
new_task = threading.thread(target=worker_1)
new_task.start()
time.sleep(1)
print('
main thread b is:
' + str(obj.b))
輸出結果:
current thread b is:2main thread bis:1
不用在意它是如何封裝成乙個執行緒隔離物件的細節,直接就可以使用
使用執行緒隔離的意義:
使用當前執行緒能夠正確引用到他自己所建立的物件,而不是引用到其他執行緒建立的物件
Flask中的執行緒隔離原理
python因為gil 全域性直譯器鎖 的原因,本身實現的多執行緒就是偽多執行緒,同一時間只能有乙個cpu核執行乙個python應用,這裡就有人覺得python的多執行緒沒有用。這裡可以這樣理解 其實應用分為兩種,一種是cpu運算密集的應用,一種是io密集的應用,顧名思義,前者是比較依賴cpu資源,...
六十九 flask上下文之執行緒隔離的g物件的使用
儲存全域性物件的g物件 g物件是在整個flask應用執行期間都是可以使用的,並且也是和request一樣,是執行緒隔離的,這個物件是專門用來存放開發者自己定義的一些資料,方便在整個flask程式中都可以使用,一般使用就是將一些經常會用到的資料繫結到上面,以後就直接從g上面取就可以了,而不需要通過傳參...
local執行緒隔離物件
為什麼要執行緒隔離 因為有請求的併發的時候,伺服器不知道哪個是哪個。local執行緒隔離的原理 有多組請求的時候,local將執行緒分割成多個子執行緒,每個子執行緒處理成字典,然後再分發給伺服器。可以處理的物件有 request session g 等。示例 encoding utf 8 from ...