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

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

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

1.解釋

1.1 Lock:

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

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

1.2 RLock:

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

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

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

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

2.示例

Lock在鎖定時不屬于特定線程,也就是說,Lock可以在一個線程中上鎖,在另一個線程中解鎖。

而對于RLock來說,只有當前線程才能釋放本線程上的鎖,即 解鈴還須系鈴人 :

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é)果正常輸出,說明一個線程上的鎖,可以由另外線程解鎖。如果把上面的鎖改為RLock則報錯。

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

import threading
rlock = threading.RLock()
def func():
    if rlock.acquire():   # 第一把鎖
        print("first lock")
        if rlock.acquire():  # 第一把鎖沒解開的情況下接著上第二把鎖
            print("second lock")
            rlock.release()  # 解開第二把鎖
        rlock.release()  # 解開第一把鎖
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

    用python建立兩個Y軸的XY曲線圖方法

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

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

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

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

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

    python實現(xiàn)的簡單窗口倒計時界面實例

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

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

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

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

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

    教你pycharm運行Django第一個項目

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

最新評論