Python多執行緒學習4 執行緒鎖lock

2021-08-21 06:46:08 字數 2547 閱讀 5288

不使用 lock 的情況

函式一:全域性變數a的值每次加1,迴圈10次,並列印

def

job1

():global a

for i in range(10):

a+=1

print('job1',a)

函式二:全域性變數a的值每次加10,迴圈10次,並列印

def

job2

():global a

for i in range(10):

a+=10

print('job2',a)

主函式:定義兩個執行緒,分別執行函式一和函式二

if __name__==

'__main__':

a=0 t1=threading.

thread(target=job1)

t2=threading.

thread(target=job2)

t1.start()

t2.start()

t1.join()

t2.join()

完整**:

import threading

defjob1

():global a

for i in range(10):

a+=1

print('job1',a)

defjob2

():global a

for i in range(10):

a+=10

print('job2',a)

if __name__== '__main__':

lock=threading.lock()

a=0t1=threading.thread(target=job1)

t2=threading.thread(target=job2)

t1.start()

t2.start()

t1.join()

t2.join()

執行結果(在spyder編譯器下執行的列印結果):

job1job2 11

job2 21

job2 31

job2 41

job2 51

job2 61

job2 71

job2 81

job2 91

job2 101

1job1 102

job1 103

job1 104

job1 105

job1 106

job1 107

job1 108

job1 109

job1 110

使用 lock 的情況

lock在不同執行緒使用同一共享記憶體時,能夠確保執行緒之間互不影響,使用lock的方法是, 在每個執行緒執行運算修改共享記憶體之前,執行lock.acquire()將共享記憶體上鎖, 確保當前執行緒執行時,記憶體不會被其他執行緒訪問,執行運算完畢後,使用lock.release()將鎖開啟, 保證其他的執行緒可以使用該共享記憶體。

函式一和函式二加鎖

import threading

import time

defthread_job

(): print('t1 start\n')

for i in range(10):

time.sleep(0.1)

print('t1 finish\n')

deft2_job

(): print('t2 start\n')

print('t2 finish\n')

defmain

(): added_thread = threading.thread(target = thread_job)

thread2 = threading.thread(target = t2_job)

thread2.start()

added_thread.start()

added_thread.join() #等待前面執行完之後

thread2.join()

print('all done\n')

if __name__=='__main__':

main()

執行結果

job1 1

job1 2

job1 3

job1 4

job1 5

job1 6

job1 7

job1 8

job1 9

job1 10

job2 20

job2 30

job2 40

job2 50

job2 60

job2 70

job2 80

job2 90

job2 100

job2 110

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

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

python 多執行緒 鎖

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

Python學習筆記 多執行緒鎖

多執行緒的鎖 如果有多個執行緒同時操作乙個物件,如果沒有很好地保護該物件,會造成程式結果的不可預期 多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。因此需要用鎖threading.l...