python使用鎖訪問共享變量實例解析
本文研究的主要是python使用鎖訪問共享變量,具體介紹和實現(xiàn)如下。
python 做多線程編程時,多個線程若同時訪問某個變量,可能會對變量數(shù)據(jù)造成破壞,pyhon中的threading模塊提供了lock對象,lock中的acquire方法用于獲取一個鎖,而release用于釋放一個鎖。當一個線程取得鎖時,它變獲得了共享變量的訪問權,此時進入阻塞狀態(tài),若其它線程申請訪問這個變量,則必須等到這個線程調用release方法釋放這個鎖。下面是python中使用鎖的實例:
#!/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()
如果一個線程想多次獲取資源訪問權,在上面的程序中連續(xù)兩次使用acquire() ,將會造成死鎖現(xiàn)象,因為第一次申請到的資源還沒有來得及釋放,就進行了第二次申請。python中的threading模塊提供了可重入鎖RLock,RLock提供了計數(shù)器。一個線程申請到某個資源,計數(shù)器會加1,釋放掉這個資源計數(shù)器會減1.這樣,一個線程可以多次請求同一個資源,在所有請求都被釋放后,其它線程才允許獲取這個鎖。上面的代碼做簡單修改,可得:
#!/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()
總結
以上就是本文關于python使用鎖訪問共享變量實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
使用Python判斷質數(shù)(素數(shù))的簡單方法講解
這篇文章主要介紹了使用Python判斷質數(shù)(素數(shù))的簡單方法講解,經常被用來做科學計算的Python處理這種小問題當然手到擒來^_-需要的朋友可以參考下2016-05-05
一文教會你用nginx+uwsgi部署自己的django項目
uWSGI是一個Web服務器,它實現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議,下面這篇文章主要給大家介紹了關于用nginx+uwsgi部署自己的django項目的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08
Python提取PDF發(fā)票信息保存Excel文件并制作EXE程序的全過程
之前零散的用過一點python做數(shù)據(jù)處理,這次又遇到一個數(shù)據(jù)處理的小功能,下面這篇文章主要給大家介紹了關于Python提取PDF發(fā)票信息保存Excel文件并制作EXE程序的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11
Python爬蟲數(shù)據(jù)的分類及json數(shù)據(jù)使用小結
這篇文章主要介紹了Python爬蟲數(shù)據(jù)的分類及json數(shù)據(jù)使用小結,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下2021-03-03
gethostbyaddr在Python3中引發(fā)UnicodeDecodeError
本文介紹了gethostbyaddr()在Python?3中引發(fā)UnicodeDecodeError的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧2022-05-05

