python使用鎖訪問(wèn)共享變量實(shí)例解析
本文研究的主要是python使用鎖訪問(wèn)共享變量,具體介紹和實(shí)現(xiàn)如下。
python 做多線程編程時(shí),多個(gè)線程若同時(shí)訪問(wèn)某個(gè)變量,可能會(huì)對(duì)變量數(shù)據(jù)造成破壞,pyhon中的threading模塊提供了lock對(duì)象,lock中的acquire方法用于獲取一個(gè)鎖,而release用于釋放一個(gè)鎖。當(dāng)一個(gè)線程取得鎖時(shí),它變獲得了共享變量的訪問(wèn)權(quán),此時(shí)進(jìn)入阻塞狀態(tài),若其它線程申請(qǐng)?jiān)L問(wèn)這個(gè)變量,則必須等到這個(gè)線程調(diào)用release方法釋放這個(gè)鎖。下面是python中使用鎖的實(shí)例:
#!/usr/bin/env python import threading,time q=threading.Lock() #create a lock object def mythread(): global a q.acquire() #acquire the lock a=threading.currentThread().getName() print "a is modified by",a q.release() #release the lock for i in range(1,4): t=threading.Thread(target=mythread,name="Thread %d"%i) t.start()
如果一個(gè)線程想多次獲取資源訪問(wèn)權(quán),在上面的程序中連續(xù)兩次使用acquire()
,將會(huì)造成死鎖現(xiàn)象,因?yàn)榈谝淮紊暾?qǐng)到的資源還沒(méi)有來(lái)得及釋放,就進(jìn)行了第二次申請(qǐng)。python中的threading模塊提供了可重入鎖RLock,RLock提供了計(jì)數(shù)器。一個(gè)線程申請(qǐng)到某個(gè)資源,計(jì)數(shù)器會(huì)加1,釋放掉這個(gè)資源計(jì)數(shù)器會(huì)減1.這樣,一個(gè)線程可以多次請(qǐng)求同一個(gè)資源,在所有請(qǐng)求都被釋放后,其它線程才允許獲取這個(gè)鎖。上面的代碼做簡(jiǎn)單修改,可得:
#!/usr/bin/env python import threading,time q=threading.RLock() #create a lock object def mythread(): global a q.acquire() #acquire the lock a=threading.currentThread().getName() print "a is modified by",a q.acquire() a=threading.currentThread().getName() print "a is modified by %s the second time"% a q.release() q.release() #release the lock for i in range(1,4): t=threading.Thread(target=mythread,name="Thread %d"%i) t.start()
總結(jié)
以上就是本文關(guān)于python使用鎖訪問(wèn)共享變量實(shí)例解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn)
這篇文章主要介紹了pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python tkinter中的錨點(diǎn)(anchor)問(wèn)題及處理
這篇文章主要介紹了python tkinter中的錨點(diǎn)(anchor)問(wèn)題及處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Python輕松獲取網(wǎng)絡(luò)時(shí)間和本地時(shí)間技巧揭秘
這篇文章主要為大家介紹了Python輕松獲取網(wǎng)絡(luò)時(shí)間和本地時(shí)間技巧揭秘,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01python機(jī)器學(xué)習(xí)混淆矩陣及confusion?matrix函數(shù)使用
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)混淆矩陣confusion_matrix函數(shù)使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python辦公自動(dòng)化PPT批量轉(zhuǎn)換操作
本文介紹如何使用 python 操作 PPT,用到的模塊就是 python-pptx,以下的示例基本滿足日常需求,如果要知道更多,可以訪問(wèn) python-pptx 的官方文檔2021-09-09Python基礎(chǔ) while循環(huán)與break、continue關(guān)鍵字
今天再帶著大家講述一下while循環(huán)。那么for循環(huán)和while循環(huán),到底有什么區(qū)別呢?下面文章就來(lái)詳細(xì)介紹,感興趣的小伙伴可以參考一下2021-10-10Pytorch如何把Tensor轉(zhuǎn)化成圖像可視化
這篇文章主要介紹了Pytorch如何把Tensor轉(zhuǎn)化成圖像可視化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12