欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中threading模塊的Lock和RLock區(qū)別詳解

 更新時(shí)間:2023年09月22日 10:03:59   作者:生有涯,知無(wú)涯  
這篇文章主要介紹了Python中threading模塊的Lock和RLock區(qū)別詳解,Lock鎖是Python的原始鎖,在鎖定時(shí)不屬于任何一個(gè)線程,在調(diào)用了 lock.acquire() 方法后,進(jìn)入鎖定狀態(tài),lock.release()方法可以解鎖,底層是通過(guò)一個(gè)函數(shù)來(lái)實(shí)現(xiàn)的,需要的朋友可以參考下

1.解釋

1.1 Lock:

Lock鎖是Python的原始鎖,在鎖定時(shí)不屬于任何一個(gè)線程。在調(diào)用了 lock.acquire() 方法后,進(jìn)入鎖定狀態(tài),lock.release()方法可以解鎖。

底層是通過(guò)一個(gè)函數(shù)來(lái)實(shí)現(xiàn)的,會(huì)根據(jù)不同的操作系統(tǒng)選擇一個(gè)最有效的版本實(shí)例

1.2 RLock:

RLock被稱為重入鎖,RLock鎖是一個(gè)可以被同一個(gè)線程多次 acquire 的鎖,但是最后必須由獲取它的線程來(lái)釋放它,不論同一個(gè)線程調(diào)用了多少次的acquire,最后它都必須調(diào)用相同次數(shù)的 release 才能完全釋放鎖,這個(gè)時(shí)候其他的線程才能獲取這個(gè)鎖。

acquire()/release() 對(duì)可以嵌套,重入鎖必須由獲取它的線程釋放。一旦線程獲得了重入鎖,同一個(gè)線程再次獲取它將不阻塞。

RLock內(nèi)部的鎖的實(shí)現(xiàn)和Lock用的是同一個(gè)函數(shù)。

是否同一線程是否可重復(fù)加鎖
Lock
RLock

2.示例

Lock在鎖定時(shí)不屬于特定線程,也就是說(shuō),Lock可以在一個(gè)線程中上鎖,在另一個(gè)線程中解鎖。

而對(duì)于RLock來(lái)說(shuō),只有當(dāng)前線程才能釋放本線程上的鎖,即 解鈴還須系鈴人 :

import threading
import time
lock = threading.Lock()
lock.acquire()
def func():
    lock.release()
    print("lock is released")
t = threading.Thread(target=func)
t.start()

輸出結(jié)果為:

lock is released

上面代碼中,在主線程中創(chuàng)建鎖,并上鎖,但是是在t線程中釋放鎖,結(jié)果正常輸出,說(shuō)明一個(gè)線程上的鎖,可以由另外線程解鎖。如果把上面的鎖改為RLock則報(bào)錯(cuò)。

RLock允許在同一線程中被多次acquire。而Lock卻不允許這種情況。也就是說(shuō),下面的情況對(duì)于RLock是允許的:

import threading
rlock = threading.RLock()
def func():
    if rlock.acquire():   # 第一把鎖
        print("first lock")
        if rlock.acquire():  # 第一把鎖沒(méi)解開(kāi)的情況下接著上第二把鎖
            print("second lock")
            rlock.release()  # 解開(kāi)第二把鎖
        rlock.release()  # 解開(kāi)第一把鎖
t = threading.Thread(target=func)
t.start()

輸出結(jié)果

 first lock
 second lock

到此這篇關(guān)于Python中threading模塊的Lock和RLock區(qū)別詳解的文章就介紹到這了,更多相關(guān)threading模塊的Lock和RLock內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python列表推導(dǎo)式入門(mén)學(xué)習(xí)解析

    python列表推導(dǎo)式入門(mén)學(xué)習(xí)解析

    這篇文章主要介紹了python列表推導(dǎo)式入門(mén)學(xué)習(xí)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估

    YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估

    這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04
  • 詳解使用Python下載文件的幾種方法

    詳解使用Python下載文件的幾種方法

    這篇文章主要介紹了詳解使用Python下載文件的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 用python建立兩個(gè)Y軸的XY曲線圖方法

    用python建立兩個(gè)Y軸的XY曲線圖方法

    今天小編就為大家分享一篇用python建立兩個(gè)Y軸的XY曲線圖方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python面向?qū)ο蟮某绦蛟O(shè)計(jì)詳情

    Python面向?qū)ο蟮某绦蛟O(shè)計(jì)詳情

    這篇文章主要介紹了Python面向?qū)ο蟮某绦蛟O(shè)計(jì)詳情,面向?qū)ο蟮某绦蛟O(shè)計(jì)在Python中具有非常重要的地位,熟練的使用面向?qū)ο缶幊棠軌驗(yàn)槲覀兊腜ython編程提供很多的便利之處,希望您閱讀完本文后能夠有所收獲
    2022-01-01
  • django如何根據(jù)現(xiàn)有數(shù)據(jù)庫(kù)表生成model詳解

    django如何根據(jù)現(xiàn)有數(shù)據(jù)庫(kù)表生成model詳解

    這篇文章主要給大家介紹了關(guān)于django如何根據(jù)現(xiàn)有數(shù)據(jù)庫(kù)表生成model的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-08-08
  • python實(shí)現(xiàn)的簡(jiǎn)單窗口倒計(jì)時(shí)界面實(shí)例

    python實(shí)現(xiàn)的簡(jiǎn)單窗口倒計(jì)時(shí)界面實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)的簡(jiǎn)單窗口倒計(jì)時(shí)界面,實(shí)例分析了Python基于Tkinter操作windows窗口界面的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • python 性能優(yōu)化方法小結(jié)

    python 性能優(yōu)化方法小結(jié)

    本文主要介紹了python 提高性能的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • python中如何實(shí)現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測(cè)試集的方法

    python中如何實(shí)現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測(cè)試集的方法

    這篇文章主要介紹了python中如何實(shí)現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測(cè)試集的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 教你pycharm運(yùn)行Django第一個(gè)項(xiàng)目

    教你pycharm運(yùn)行Django第一個(gè)項(xiàng)目

    本文主要介紹了教你pycharm運(yùn)行Django第一個(gè)項(xiàng)目的實(shí)現(xiàn),文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08

最新評(píng)論