Python學習筆記 多執行緒鎖

2021-09-05 09:32:16 字數 1474 閱讀 4846

多執行緒的鎖

​​​​​​​如果有多個執行緒同時操作乙個物件,如果沒有很好地保護該物件,會造成程式結果的不可預期

''' 多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改, 因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。 因此需要用鎖threading.lock(),去鎖定資源(可以建立不同的鎖) lock.acquire()告訴其他執行緒,當前執行緒正在占用該部分資源 lock.release()告訴其他執行緒,當前執行緒已使用完此部分資源 '''

執行緒的join方法

''' join方法主要是會阻塞主線程,在子執行緒結束執行前,主線程會被阻塞等待。 join方法的timeout引數表示了主線程被每個子執行緒阻塞等待的時間。 '''

# 如果有多個執行緒同時操作乙個物件,如果沒有很好地保護該物件,會造成程式結果的不可預期

'''多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,

因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。

因此需要用鎖threading.lock(),去鎖定資源(可以建立不同的鎖)

lock.acquire()告訴其他執行緒,當前執行緒正在占用該部分資源

lock.release()告訴其他執行緒,當前執行緒已使用完此部分資源

'''import time, threading

balance = 0

lock = threading.lock() # 這裡只是定義乙個鎖,命名為lock

def change(n):

global balance # 多執行緒是共享資源的,使用全域性變數

balance = balance + n

balance = balance - n

def run_thread(n):

for i in range(30000):

lock.acquire() # 獲取鎖

try:

change(n)

finally:

lock.release() # 釋放鎖,讓其他執行緒使用balance資源

t1 = threading.thread(target=run_thread, args=(5,)) # 建立乙個thread例項,即乙個新執行緒

t2 = threading.thread(target=run_thread, args=(8,))

t1.start() # 呼叫start()開始執行執行緒

t2.start()

'''join方法主要是會阻塞主線程,在子執行緒結束執行前,主線程會被阻塞等待。

join方法的timeout引數表示了主線程被每個子執行緒阻塞等待的時間。

如果這裡沒加join方法,只用了執行緒鎖,那麼程式結果依舊會不可預期

'''t1.join()

t2.join()

print(balance)

python 多執行緒筆記(2) 鎖

鎖是什麼?什麼場合使用鎖?鎖是一種機制,用於保護那些會引起衝突的資源。比如上廁所,進去之後第一件事幹嘛?把廁所門反鎖!表示什麼呢?表示這個廁所正在使用中!至於在廁所裡面幹大事 幹小事 還是 都可以!完事之後幹嘛?把廁所門開啟!表示什麼呢?那誰,你可以進來 了。import threading imp...

python 多執行緒 鎖

參考 python cookbook 12章 啟動和停止執行緒 start 啟動執行緒 is alive 判斷是否已經結束 join 請求連線某個執行緒,等待該執行緒結束,才退出join函式 daemon引數,守護執行緒,該執行緒無法被連線,主線程結束後自動銷毀。2.7不適用 終止執行緒 需要自己構...

python多執行緒鎖 python的多執行緒程式設計之鎖

1 背景概述 在python中,要保證資料的正確性,並且自己對資料進行控制,對資料進行加鎖並且自己釋放鎖。多執行緒的主要目的為了提高效能與速度,用在無關的方向是最好的,例如在使用爬蟲的時候,可以使用多執行緒來進行爬取資料,因為在這些執行緒之間沒有需要共同操作的資料,從而在這個時候利用是最好的。如果需...