python多執行緒的鎖用法

2021-09-24 17:58:46 字數 1600 閱讀 4819

鎖機制

在了解鎖機制前,我們先來看一下下面這個例子:

## 使用多執行緒進行加法運算

import threading

# 定義全域性變數value

value = 0

# 定義加法執行緒函式

def add_value():

global value

for x in range(1000000):

value += 1

print('value = ', value)

# 定義兩個執行緒併發執行加法操作

def add_thread_main():

for x in range(2):

t = threading.thread(target=add_value)

t.start()

if __name__ == '__main__':

add_thread_main()

"""output:

value = 1147074

value = 1211397

"""

上面的示例按照我們的邏輯看來應該是依次輸出1000000和2000000,但結果並不是這樣的,這就是常說的多執行緒共享全域性變數問題。其實在我們執行執行緒時,執行的順序是不一定的,也就是說有時候可能重合在一起執行,因而導致有時雖二者都對共享變數進行了一次加法(即本應加兩次)而實際上只真正加了一次。

而為了解決這樣的問題,threading模組提供了乙個lock類,這個類可以在某個執行緒訪問某個變數的時候加鎖,其他執行緒此時不能訪問該變數,直到加鎖執行緒處理完控制變數並把鎖釋放了,其他執行緒才能進行訪問處理。鎖機制使用起來也很簡單,由於是多個執行緒訪問共享變數,因而需設定乙個全域性的lock類物件,然後在訪問前後分別使用lock類的acquire()方法加鎖和release()方法釋放鎖。

上述例子使用鎖機制僅需做以下幾處的修改:

## 使用多執行緒進行加法運算

import threading

# 定義全域性變數value

value = 0

glock = threading.lock()

# 定義加法執行緒函式

def add_value():

global value

glock.acquire()

for x in range(100000):

value += 1

print('value = ', value)

glock.release()

# 定義兩個執行緒併發執行加法操作

def add_thread_main():

for x in range(4):

t = threading.thread(target=add_value)

t.start()

if __name__ == '__main__':

add_thread_main()

「」」output:

value = 100000

value = 200000

value = 300000

value = 400000

"""

**:

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

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

python 多執行緒 鎖

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

python執行緒互斥鎖 Python多執行緒與互斥鎖

多執行緒 threading python的thread模組是 較底層的模組,python的threading 模組是對thread做了 些包裝的,可以更加 便的被使 1.使 threading模組 from threading import thread 匯入模組 t thread target ...