溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python使用鎖訪問共享變量實例解析

發(fā)布時間:2020-10-05 15:41:03 來源:腳本之家 閱讀:126 作者:零丁若嘆 欄目:開發(fā)技術(shù)

本文研究的主要是python使用鎖訪問共享變量,具體介紹和實現(xiàn)如下。

python 做多線程編程時,多個線程若同時訪問某個變量,可能會對變量數(shù)據(jù)造成破壞,pyhon中的threading模塊提供了lock對象,lock中的acquire方法用于獲取一個鎖,而release用于釋放一個鎖。當(dāng)一個線程取得鎖時,它變獲得了共享變量的訪問權(quán),此時進(jìn)入阻塞狀態(tài),若其它線程申請訪問這個變量,則必須等到這個線程調(diào)用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() 

如果一個線程想多次獲取資源訪問權(quán),在上面的程序中連續(xù)兩次使用acquire() ,將會造成死鎖現(xiàn)象,因為第一次申請到的資源還沒有來得及釋放,就進(jì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() 

總結(jié)

以上就是本文關(guān)于python使用鎖訪問共享變量實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI