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

對python多線程中Lock()與RLock()鎖詳解

 更新時間:2019年01月11日 10:13:04   作者:comprel  
今天小編就為大家分享一篇對python多線程中Lock()與RLock()鎖詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

資源總是有限的,程序運行如果對同一個對象進行操作,則有可能造成資源的爭用,甚至導(dǎo)致死鎖

也可能導(dǎo)致讀寫混亂

鎖提供如下方法:

1.Lock.acquire([blocking])

2.Lock.release()

3.threading.Lock() 加載線程的鎖對象,是一個基本的鎖對象,一次只能一個鎖定,其余鎖請求,需等待鎖釋放后才能獲取

4.threading.RLock() 多重鎖,在同一線程中可用被多次acquire。如果使用RLock,那么acquire和release必須成對出現(xiàn),

調(diào)用了n次acquire鎖請求,則必須調(diào)用n次的release才能在線程中釋放鎖對象

例如:

無鎖:

#coding=utf8
import threading
import time

num = 0

def sum_num(i):
  global num
  time.sleep(1)
  num +=i
  print num

print '%s thread start!'%(time.ctime())

try:
  for i in range(6):
    t =threading.Thread(target=sum_num,args=(i,))
    t.start()

except KeyboardInterrupt,e:
  print "you stop the threading"

print '%s thread end!'%(time.ctime())

輸出:

Sun May 28 20:54:59 2017 thread start!
Sun May 28 20:54:59 2017 thread end!
01
3
710
15

結(jié)果顯示混亂

引入鎖:

#coding=utf8
import threading
import time

num = 0

def sum_num(i):
  lock.acquire()
  global num
  time.sleep(1)
  num +=i
  print num
  lock.release()

print '%s thread start!'%(time.ctime())

try:
  lock=threading.Lock()
  list = []
  for i in range(6):
    t =threading.Thread(target=sum_num,args=(i,))
    list.append(t)
    t.start()

  for threadinglist in list:
    threadinglist.join()

except KeyboardInterrupt,e:
  print "you stop the threading"

print '%s thread end!'%(time.ctime())

結(jié)果:

Sun May 28 21:15:37 2017 thread start!
0
1
3
6
10
15
Sun May 28 21:15:43 2017 thread end!

其中:

lock=threading.Lock()加載鎖的方法也可以換成lock=threading.RLock()

如果將上面的sum_num修改為:

  lock.acquire()
  global num
  lock.acquire()
  time.sleep(1)
  num +=i
  lock.release()
  print num
  lock.release()

那么:

lock=threading.Lock() 加載的鎖,則一直處于等待中,鎖等待

而lock=threading.RLock() 運行正常

以上這篇對python多線程中Lock()與RLock()鎖詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 九個Python列表生成式高頻面試題匯總

    九個Python列表生成式高頻面試題匯總

    本文為大家整理了九個Python列表生成式的面試題(從簡單到困難排序),可以幫助大家提高列表生成式的理解水平,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-05-05
  • python中time模塊的幾個時間轉(zhuǎn)化方式

    python中time模塊的幾個時間轉(zhuǎn)化方式

    這篇文章主要介紹了python中time模塊的幾個時間轉(zhuǎn)化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Python快速轉(zhuǎn)換numpy數(shù)組中Nan和Inf的方法實例說明

    Python快速轉(zhuǎn)換numpy數(shù)組中Nan和Inf的方法實例說明

    今天小編就為大家分享一篇關(guān)于Python快速轉(zhuǎn)換numpy數(shù)組中Nan和Inf的方法實例說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python API 操作Hadoop hdfs詳解

    Python API 操作Hadoop hdfs詳解

    這篇文章主要介紹了Python API 操作Hadoop hdfs詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python讀取并顯示圖片的三種方法(opencv、matplotlib、PIL庫)

    python讀取并顯示圖片的三種方法(opencv、matplotlib、PIL庫)

    這篇文章主要給大家介紹了關(guān)于python讀取并顯示圖片的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • django組合搜索實現(xiàn)過程詳解(附代碼)

    django組合搜索實現(xiàn)過程詳解(附代碼)

    這篇文章主要介紹了django組合搜索實現(xiàn)過程詳解(附代碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 詳解Python如何實現(xiàn)惰性導(dǎo)入-lazy import

    詳解Python如何實現(xiàn)惰性導(dǎo)入-lazy import

    如果你的 Python 程序程序有大量的 import,而且啟動非常慢,那么你應(yīng)該嘗試懶導(dǎo)入,本文分享一種實現(xiàn)惰性導(dǎo)入的一種方法,需要的可以參考一下
    2022-10-10
  • Python實現(xiàn)UDP與TCP通信的示例詳解

    Python實現(xiàn)UDP與TCP通信的示例詳解

    UDP是一種無連接的、不可靠的傳輸協(xié)議;TCP是一種可靠的、面向連接的傳輸協(xié)議。這篇文章主要介紹了Python實現(xiàn)UDP與TCP通信的方法,需要的可以參考一下
    2023-03-03
  • pycharm 使用心得(九)解決No Python interpreter selected的問題

    pycharm 使用心得(九)解決No Python interpreter selected的問題

    PyCharm 是由JetBrains打造的一款 Python IDE。具有智能代碼編輯器,能理解 Python 的特性并提供卓越的生產(chǎn)力推進工具:自動代碼格式化、代碼完成、重構(gòu)、自動導(dǎo)入和一鍵代碼導(dǎo)航等。這些功能在先進代碼分析程序的支持下,使 PyCharm 成為 Python 專業(yè)開發(fā)人員和剛起步人員使用的有力工具。
    2014-06-06
  • python實現(xiàn)四人制撲克牌游戲

    python實現(xiàn)四人制撲克牌游戲

    這篇文章主要介紹了python實現(xiàn)四人制撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論