這篇文章主要講解了“python多線程中互斥鎖Threading.Lock的簡單應用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python多線程中互斥鎖Threading.Lock的簡單應用”吧!
一、線程共享進程資源
每個線程互相獨立,相互之間沒有任何關系,但是在同一個進程中的資源,線程是共享的,如果不進行資源的合理分配,對數據造成破壞,使得線程運行的結果不可預期。這種現象稱為“線程不安全”。
實例如下:
#-*- coding: utf-8 -*- import threading import time def test_xc(): f = open("test.txt","a") f.write("test_dxc"+'\n') time.sleep(1) f.close() if __name__ == '__main__': for i in xrange(5): t = threading.Thread(target=test_xc) t.start()
結果展示:
二、互斥鎖同步
線程同步能夠保證多個線程安全訪問競爭資源,最簡單的同步機制是引入互斥鎖?;コ怄i為資源引入一個狀態:鎖定/非鎖定。某個線程要更改共享數據時,先將其鎖定,此時資源的狀態為“鎖定”,其他線程不能更改;直到該線程釋放資源,將資源的狀態變成“非鎖定”,其他的線程才能再次鎖定該資源?;コ怄i保證了每次只有一個線程進行寫入操作,從而保證了多線程情況下數據的正確性。
threading模塊中定義了Lock類,可以方便的處理鎖定:
#創建鎖 mutex = threading.Lock() #鎖定 mutex.acquire([timeout])#timeout是超時時間 #釋放 mutex.release()
其中,鎖定方法acquire可以有一個超時時間的可選參數timeout。如果設定了timeout,則在超時后通過返回值可以判斷是否得到了鎖,從而可以進行一些其他的處理。
三、使用線程鎖
<pre name="code" class="python">#-*- coding: utf-8 -*- import threading import time def test_xc(): f = open("test.txt","a") f.write("test_dxc"+'\n') time.sleep(1) mutex.acquire()#取得鎖 f.close() mutex.release()#釋放鎖 if __name__ == '__main__': mutex = threading.Lock()#創建鎖 for i in xrange(5): t = threading.Thread(target=test_xc) t.start()
運行結果
感謝各位的閱讀,以上就是“python多線程中互斥鎖Threading.Lock的簡單應用”的內容了,經過本文的學習后,相信大家對python多線程中互斥鎖Threading.Lock的簡單應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。