python 線程鎖

來源:互聯網
上載者:User

標籤:time   reading   同步   多重   需要   線程   python   int   記錄   

  資源總是有限的,程式運行如果對同一個對象進行操作,則有可能造成資源的爭用,甚至導致死結,或者導致讀寫混亂,python中提供線程鎖對線程的調用進行控制

  鎖提供如下方法: 

    1.Lock.acquire([blocking]) 

    2.Lock.release()  把

    3.threading.Lock() 載入線程的鎖對象,是一個基本的鎖對象,一次只能一個鎖定,其餘鎖請求,需等待鎖釋放後才能擷取

    4.threading.RLock() 多重鎖,在同一線程中可用被多次acquire。如果使用RLock,那麼acquire和release必須成對出現, 

調用了n次acquire鎖請求,則必須調用n次的release才能線上程中釋放鎖對象

    lock執行個體

import  threading   import  time         counter = 0 counter_lock = threading.Lock() #只是定義一個鎖,可以定義多個鎖,需要的時候,任意一個鎖可以鎖定資源counter_lock2 = threading.Lock()  counter_lock3 = threading.Lock()    #可以使用上邊三個鎖的任何一個來鎖定資源     class  MyTestThread(threading.Thread):#使用類定義thread,繼承threading.Thread      def  __init__(self,name):           threading.Thread.__init__(self)           self.name = "Thread-" + str(name)      def run(self):   #重寫run函數,run函數必須實現          global counter,counter_lock #定義全域變數          time.sleep(1);   #通過線程掛起,查看是否會出現資源紊亂         if counter_lock.acquire(): #當需要獨佔counter資源時,必須先鎖定,這個鎖可以是任意的一個鎖,可以使用上邊定義的3個鎖中的任意一個             counter += 1                print "I am %s, set counter:%s"  % (self.name,counter)               counter_lock.release() #使用完counter資源必須要將這個鎖開啟,讓其他線程使用 ,lock與release必須成對出現               if  __name__ ==  "__main__":       for i in range(1,101):           my_thread = MyThread(i)         my_thread.start()

  通過先建立一個lock鎖,線上程的run()方法中,使用lock鎖定全域變數,這時候使得此全域變數只會被當前線程使用和修改,不會出現多個線程同時修改一個變數的情況,在該線程運行完成之後,release釋放同步鎖,使得其他的線程可以競爭該全域變數,從而保證了全域變數的安全性。

 

 

   在threading模組中還有一個RLOCK類,稱之為可重新進入鎖。該鎖對象內部維護著一個Lock和一個counter對象。counter對象記錄了acquire的次數,使得資源可以被多次require。最後,當所有RLock被release後,其他線程才能擷取資源。在同一個線程中,RLock.acquire可以被多次調用,利用該特性,可以解決部分死結問題。

python 線程鎖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.