對(duì)python多線(xiàn)程中互斥鎖Threading.Lock的簡(jiǎn)單應(yīng)用詳解
一、線(xiàn)程共享進(jìn)程資源
每個(gè)線(xiàn)程互相獨(dú)立,相互之間沒(méi)有任何關(guān)系,但是在同一個(gè)進(jìn)程中的資源,線(xiàn)程是共享的,如果不進(jìn)行資源的合理分配,對(duì)數(shù)據(jù)造成破壞,使得線(xiàn)程運(yùn)行的結(jié)果不可預(yù)期。這種現(xiàn)象稱(chēng)為“線(xiàn)程不安全”。
實(shí)例如下:
#-*- 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()
結(jié)果展示:

二、互斥鎖同步
線(xiàn)程同步能夠保證多個(gè)線(xiàn)程安全訪(fǎng)問(wèn)競(jìng)爭(zhēng)資源,最簡(jiǎn)單的同步機(jī)制是引入互斥鎖?;コ怄i為資源引入一個(gè)狀態(tài):鎖定/非鎖定。某個(gè)線(xiàn)程要更改共享數(shù)據(jù)時(shí),先將其鎖定,此時(shí)資源的狀態(tài)為“鎖定”,其他線(xiàn)程不能更改;直到該線(xiàn)程釋放資源,將資源的狀態(tài)變成“非鎖定”,其他的線(xiàn)程才能再次鎖定該資源。互斥鎖保證了每次只有一個(gè)線(xiàn)程進(jìn)行寫(xiě)入操作,從而保證了多線(xiàn)程情況下數(shù)據(jù)的正確性。
threading模塊中定義了Lock類(lèi),可以方便的處理鎖定:
#創(chuàng)建鎖 mutex = threading.Lock() #鎖定 mutex.acquire([timeout])#timeout是超時(shí)時(shí)間 #釋放 mutex.release()
其中,鎖定方法acquire可以有一個(gè)超時(shí)時(shí)間的可選參數(shù)timeout。如果設(shè)定了timeout,則在超時(shí)后通過(guò)返回值可以判斷是否得到了鎖,從而可以進(jìn)行一些其他的處理。
三、使用線(xiàn)程鎖
<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()#創(chuàng)建鎖
for i in xrange(5):
t = threading.Thread(target=test_xc)
t.start()
運(yùn)行結(jié)果

以上這篇對(duì)python多線(xiàn)程中互斥鎖Threading.Lock的簡(jiǎn)單應(yīng)用詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)的企業(yè)粉絲抽獎(jiǎng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的企業(yè)粉絲抽獎(jiǎng)功能,涉及Python數(shù)值運(yùn)算與隨機(jī)數(shù)生成相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
Python3非對(duì)稱(chēng)加密算法RSA實(shí)例詳解
這篇文章主要介紹了Python3非對(duì)稱(chēng)加密算法RSA,結(jié)合實(shí)例形式分析了Python3 RSA加密相關(guān)模塊安裝及使用操作技巧,需要的朋友可以參考下2018-12-12
Python學(xué)習(xí)筆記之解析json的方法分析
這篇文章主要介紹了Python解析json的方法,結(jié)合實(shí)例形式分析了常見(jiàn)的Python解析與轉(zhuǎn)換json格式數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
Flask框架重定向,錯(cuò)誤顯示,Responses響應(yīng)及Sessions會(huì)話(huà)操作示例
這篇文章主要介紹了Flask框架重定向,錯(cuò)誤顯示,Responses響應(yīng)及Sessions會(huì)話(huà)操作,結(jié)合實(shí)例形式分析了flask框架中重定向,錯(cuò)誤顯示,Responses響應(yīng)及Sessions會(huì)話(huà)操作相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
詳解python中return和print的區(qū)別和用途
在 Python 中,return 和 print 是兩種常見(jiàn)的語(yǔ)句,用于在函數(shù)中輸出信息或返回值,盡管它們看起來(lái)相似,但它們有不同的作用和用法,本文將詳細(xì)介紹 return 和 print 在函數(shù)中的區(qū)別,并提供豐富的示例代碼,以幫助你更好地理解它們的用途2023-11-11
python線(xiàn)程定時(shí)器Timer實(shí)現(xiàn)原理解析
這篇文章主要介紹了python線(xiàn)程定時(shí)器Timer實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

