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

深入理解python中的ThreadLocal

 更新時(shí)間:2023年03月08日 08:30:58   作者:一根頭發(fā)學(xué)一年  
本文主要介紹了深入理解python中的ThreadLocal,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

ThreadLocal在threading模塊中,可以見得它是為我們的線程服務(wù)的。

它的主要作用是存儲(chǔ)當(dāng)前線程的變量,各個(gè)線程之間的變量名是可以相同的,但是線程之間的變量是隔離的,也就是每個(gè)線程有自己的變量副本,互不干擾。

ThreadLocal為每個(gè)線程提供 get() 或 set() 方法來創(chuàng)建獨(dú)立初始化的變量副本。

ThreadLocal的工作原理可以理解為:ThreadLocal變量相當(dāng)于一個(gè)字典,字典的第一個(gè)key是線程id,每個(gè)線程的變量存儲(chǔ)到自己id的字典里,結(jié)構(gòu)可以想象成如下:

local = {
    131443: {  # 線程id
        "name": "線程1",  # 線程變量
        "age": 10,  # 線程變量
        "status": 1  # 線程變量
    }
}

看下面一個(gè)例子:

import threading

local = threading.local()


def func():
? ? print(f"id:{local.id},name:{local.name},num:{local.num}")


def run(num):
? ? local.id = threading.current_thread().ident
? ? local.name = threading.current_thread().name
? ? local.num = num
? ? func()


if __name__ == "__main__":
? ? t1 = threading.Thread(target=run, args=(1,))
? ? t2 = threading.Thread(target=run, args=(2,))

? ? t1.start()
? ? t2.start()
? ? t1.join()
? ? t2.join()

執(zhí)行結(jié)果如下:

id:13022343168,name:Thread-1,num:1
id:13039132672,name:Thread-2,num:2

可以看到,在線程里,我們可以直接使用local點(diǎn)來獲取各自的變量,每個(gè)線程的變量是隔離的。

那么ThreadLocal有什么用呢?

  • 線程間的數(shù)據(jù)隔離
  • 進(jìn)行事務(wù)操作,存儲(chǔ)線程事務(wù)信息
  • 數(shù)據(jù)庫(kù)連接、Session會(huì)話管理
  • 在進(jìn)行對(duì)象跨層傳遞時(shí),打破層次間的約束

例如Flask中請(qǐng)求上下文對(duì)象,就是對(duì)ThreadLocal進(jìn)一步封裝,它能夠存儲(chǔ)每個(gè)請(qǐng)求的請(qǐng)求參數(shù)和其他變量,各請(qǐng)求線程之間數(shù)據(jù)隔離。

到此這篇關(guān)于深入理解python中的ThreadLocal的文章就介紹到這了,更多相關(guān)python中的ThreadLocal內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python連接es之es更新操作示例詳解

    Python連接es之es更新操作示例詳解

    這篇文章主要為大家介紹了Python連接es之es更新操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 不可錯(cuò)過的十本Python好書

    不可錯(cuò)過的十本Python好書

    不可錯(cuò)過的十本Python好書,分別適合入門、進(jìn)階到精深三個(gè)不同階段的人來閱讀,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 編寫Python爬蟲抓取暴走漫畫上gif圖片的實(shí)例分享

    編寫Python爬蟲抓取暴走漫畫上gif圖片的實(shí)例分享

    這篇文章主要介紹了編寫Python爬蟲抓取暴走漫畫上gif圖片的實(shí)例分享,示例代碼為Python3,利用到了urllib模塊、request模塊和BeautifulSoup模塊,需要的朋友可以參考下
    2016-04-04
  • Python 一句話生成字母表的方法

    Python 一句話生成字母表的方法

    今天小編就為大家分享一篇Python 一句話生成字母表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python爬蟲爬取某站上海租房圖片

    python爬蟲爬取某站上海租房圖片

    這篇文章主要介紹了學(xué)習(xí)python爬蟲并爬取某站上海租房圖片的原理介紹以及相關(guān)代碼分享,對(duì)此有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調(diào)整方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python中的集合類型知識(shí)講解

    Python中的集合類型知識(shí)講解

    這篇文章主要介紹了Python中的集合類型知識(shí)講解,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • 解決Python一行輸出不顯示的問題

    解決Python一行輸出不顯示的問題

    今天小編就為大家分享一篇解決Python一行輸出不顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python+selenium 自動(dòng)化快手短視頻發(fā)布的實(shí)現(xiàn)過程

    Python+selenium 自動(dòng)化快手短視頻發(fā)布的實(shí)現(xiàn)過程

    這篇文章主要介紹了Python+selenium 自動(dòng)化快手短視頻發(fā)布,通過調(diào)用已啟用的瀏覽器,可以實(shí)現(xiàn)直接跳過每次的登錄過程,上傳功能的使用方法通過代碼給大家介紹的也非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • django使用graphql的實(shí)例

    django使用graphql的實(shí)例

    這篇文章主要介紹了django使用graphql的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論