最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python中的Lock和Rlock

 更新時間:2021年01月26日 09:18:09   作者:abce  
這篇文章主要介紹了Python中的Lock和Rlock的相關資料,幫助大家更好的理解和學習python線程的相關知識,感興趣的朋友可以了解下

線程是進程中可以調度執(zhí)行的實體。而且,它是操作系統(tǒng)中可以執(zhí)行的最小處理單元。簡單地說,一個線程就是一個程序中可以獨立于其他代碼執(zhí)行的指令序列。為了簡單起見,你可以假設線程只是進程的子集!

Locks

鎖是Python中用于同步的最簡單的方式。鎖有兩種狀態(tài):上鎖、釋放鎖。

鎖是線程模塊中的一個類,有兩個主要方法:acquire()和release() 當調用acquire()方法時,它鎖定鎖的執(zhí)行并阻塞鎖的執(zhí)行,直到其他線程調用release()方法將其設置為解鎖狀態(tài)。鎖幫助我們有效地訪問程序中的共享資源,以防止數(shù)據(jù)損壞,它遵循互斥,因為一次只能有一個線程訪問特定的資源。

讓我們看看下面的例子來理解鎖的使用:

import threading
 
#創(chuàng)建一個lock對象
lock = threading.Lock()
 
#初始化共享資源
abce = 0
 
def sumOne():
    global abce
 
    #鎖定共享資源
    lock.acquire()
    abce = abce + 1
 
    #釋放共享資源
    lock.release()
 
def sumTwo():
    global abce
 
    #鎖定共享資源
    lock.acquire()
    abce = abce + 2
 
    #釋放共享資源
    lock.release()
 
#調用函數(shù)
 
sumOne()
sumTwo()
print(abce)

在上面的程序中,lock是一個鎖對象,全局變量abce是一個共享資源,sumOne()和sumTwo()函數(shù)扮作兩個線程,在sumOne()函數(shù)中共享資源abce首先被鎖定,然后增加了1,然后abce被釋放。sumTwo()函數(shù)執(zhí)行類似操作。 兩個函數(shù)sumOne()和sumTwo()不能同時訪問共享資源abce,一次只能一個訪問共享資源。

RLocks

默認的lock不能識別lock當前被哪個線程持有。如果任何線程正在訪問共享資源,那么試圖訪問共享資源的其他線程將被阻塞,即使鎖定共享資源的線程也是如此。 在這些情況下,可重入鎖(或RLock)用于防止訪問共享資源時出現(xiàn)不必要的阻塞。如果共享資源在RLock中,那么可以安全地再次調用它。 RLocked資源可以被不同的線程重復訪問,即使它在被不同的線程調用時仍然可以正常工作。

讓我們看看下面的例子來理解RLocks的使用:

import threading
 
#創(chuàng)建一個lock對象
lock = threading.Lock()
 
#初始化共享資源
abce = 0
 
#本線程訪問共享資源
lock.acquire()
abce = abce + 1
 
#這個線程訪問共享資源會被阻塞
lock.acquire()
abce = abce + 2
lock.release()
 
print(abce)

在上面的程序中,兩個線程同時嘗試訪問共享資源abce,這里當一個線程當前正在訪問共享資源abce時,另一個線程將被阻止訪問它。 當兩個或多個線程試圖訪問相同的資源時,有效地阻止了彼此訪問該資源,這就是所謂的死鎖,因此上述程序沒有生成任何輸出。

但是,在程序中上述問題可以通過使用RLock來解決。

import threading
 
#創(chuàng)建一個rlock對象
lock = threading.RLock()
 
#初始化共享資源
abce = 0
 
#本線程訪問共享資源
lock.acquire()
abce = abce + 1
 
#這個線程嘗試訪問共享資源
lock.acquire()
abce = abce + 2
lock.release()
 
print(abce)

在這里,沒有阻止程序中的線程訪問共享資源abce。 對于RLock對象鎖的每個acquire(),我們需要調用release()一次。

從上面提到的眾多程序和解釋中,在Python中一個Lock對象和一個RLock對象有很多區(qū)別:

locks rlocks
lock對象無法再被其他線程獲取,除非持有線程釋放 rlock對象可以被其他線程多次獲取
lock對象可被任何線程釋放 rlock對象只能被持有的線程釋放
lock對象不可以被任何線程擁有 rlock對象可以被多個線程擁有
對一個對象鎖定是很快的 對一個對象加rlock比加lock慢

以上就是詳解Python中的Lock和Rlock的詳細內容,更多關于Python中Lock和Rlock的資料請關注腳本之家其它相關文章!

相關文章

  • PyQt5顯示GIF圖片的方法

    PyQt5顯示GIF圖片的方法

    今天小編就為大家分享一篇PyQt5顯示GIF圖片的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python實現(xiàn)修改IE注冊表功能示例

    Python實現(xiàn)修改IE注冊表功能示例

    這篇文章主要介紹了Python實現(xiàn)修改IE注冊表功能,結合完整實例形式分析了Python操作IE注冊表項的相關實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-05-05
  • Python可視化模塊altair的使用詳解

    Python可視化模塊altair的使用詳解

    Altair被稱為是統(tǒng)計可視化庫,因為它可以通過分類匯總、數(shù)據(jù)變換、數(shù)據(jù)交互、圖形復合等。本文和大家聊一下Python當中的altair可視化模塊,并且通過調用該模塊來繪制一些常見的圖表,感興趣的可以了解一下
    2022-07-07
  • 深入理解python中if?__name__?==?‘__main__‘

    深入理解python中if?__name__?==?‘__main__‘

    很多python的文件中會有語句if?__name=='__main__':,一直不太明白,最近查閱了一下資料,現(xiàn)在明白,本文就來深入理解一下,感興趣的可以了解一下
    2023-08-08
  • Python面向對象編程之類的進階

    Python面向對象編程之類的進階

    這篇文章主要介紹了Python面向對象編程之類的引用,引用 Reference是對象的指針,引用是內存中真實對象的指針,表示為變量名或者內存地址、每個對象存在至少一個引用,id()函數(shù)用于獲得引用,想具體了解的小伙伴可以參考下面文章的內容
    2021-11-11
  • python實現(xiàn)大學人員管理系統(tǒng)

    python實現(xiàn)大學人員管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)大學人員管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python實現(xiàn)新型冠狀病毒傳播模型及預測代碼實例

    Python實現(xiàn)新型冠狀病毒傳播模型及預測代碼實例

    在本篇文章里小編給大家整理的是關于Python實現(xiàn)新型冠狀病毒傳播模型及預測代碼內容,有興趣的朋友們可以學習下。
    2020-02-02
  • Python進階之協(xié)程詳解

    Python進階之協(xié)程詳解

    這篇文章主要為大家介紹了Python進階之協(xié)程,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python 根據(jù)pid殺死相應進程的方法

    python 根據(jù)pid殺死相應進程的方法

    下面小編就為大家?guī)硪黄猵ython 根據(jù)pid殺死相應進程的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python簡單處理坐標排序問題示例

    Python簡單處理坐標排序問題示例

    這篇文章主要介紹了Python簡單處理坐標排序問題,結合實例形式分析了Python基于冒泡排序算法的坐標值排序相關操作技巧,需要的朋友可以參考下
    2019-07-07

最新評論

治多县| 宁都县| 金秀| 肃宁县| 黎川县| 米脂县| 湾仔区| 稻城县| 屏山县| 永昌县| 察雅县| 乌兰浩特市| 昆明市| 正定县| 容城县| 三河市| 尼玛县| 通河县| 汉沽区| 满洲里市| 龙泉市| 普陀区| 旅游| 宿州市| 盖州市| 琼结县| 梁河县| 连平县| 安庆市| 临沭县| 益阳市| 来安县| 盈江县| 海盐县| 玛多县| 龙岩市| 中宁县| 唐河县| 泽普县| 永安市| 扶绥县|