国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python學習筆記 - ThreadLocal

Berwin / 2457人閱讀

摘要:為了避免改亂為,我們在前面已經提到說要加鎖。僅供一個線程使用,線程間相互不影響。例如下列程序中函數中定義的變量就是局部變量。所有綁定的參數都是線程隔離的。下面展示一下代碼創建一個全局的對象初始化一個線程內變量,該變量線程間互不影響。

我們在編寫多線程程序的時候,往往會遇到兩種類型的變量。

一種是全局變量,多個線程共享。為了避免改亂為,我們在前面已經提到說要加鎖。

一種是局部變量。僅供一個線程使用,線程間相互不影響。

例如下列程序中task()函數中定義的count變量就是局部變量。即使我們創建了兩個線程,兩者的count遞增也不會相互影響,因為count是在task中定義的。

import threading


def task():
    count = 0
    for i in range(1000):
        count += 1
        print count


if __name__ == "__main__":
    t1 = threading.Thread(target=task)
    t1.start()
    t2 = threading.Thread(target=task)
    t2.start()

那么,這么處理是不是就完美了呢?其實還不是。
以上的例子我們舉的是一個非常簡單的例子,但是我們遇到一個比較復雜的業務邏輯的時候,比如多個局部變量,函數多重調用等,這么定義局部變量就會變得不簡潔,麻煩。
函數多重調用是指,例如:
我們定義了函數,methodA(),這個方法體內調用了methodB(), methodB()方法體中又調用了methodC()...
如果我們在某一個線程中調用了methodA()并且使用了一個變量attr,那么我們就需要將attr一層一層地傳遞給后續的函數。

有沒有一種方法,能讓我們在線程中定義一個變量后,那么這個線程中的函數就都能調用,如此才叫簡潔明了?
Python為我們做到了,那就是ThreadLocal.
ThreadLocal的用法只需要三步:

定義一個對象 threading.local

在線程內給該對象綁定參數。所有綁定的參數都是線程隔離的。

在線程內調用。

下面展示一下代碼:

# coding=utf-8
import threading

local = threading.local() # 創建一個全局的對象


def task():
    local.count = 0  # 初始化一個線程內變量,該變量線程間互不影響。
    for i in range(1000):
        count_plus()


def count_plus():
    local.count += 1
    print threading.current_thread().name, local.count


if __name__ == "__main__":
    t1 = threading.Thread(target=task)
    t1.start()
    t2 = threading.Thread(target=task)
    t2.start()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38436.html

相關文章

  • 【Java筆記ThreadLocal學習和理解

    摘要:底層是一個的散列表可擴容的數組,并采用開放地址法來解決沖突。稍后討論方法每個對象都有一個值,每初始化一個對象,值就增加一個固定的大小。因此在使用的時候要手動調用方法,防止內存泄漏。 ThreadLocal定義 先看JDK關于ThreadLocal的類注釋: This class provides thread-local variables. These variables diffe...

    red_bricks 評論0 收藏0
  • 06.Android之消息機制問題

    摘要:通過向消息池發送各種消息事件通過處理相應的消息事件。子線程往消息隊列發送消息,并且往管道文件寫數據,主線程即被喚醒,從管道文件讀取數據,主線程被喚醒只是為了讀取消息,當消息讀取完畢,再次睡眠。 目錄介紹 6.0.0.1 談談消息機制Hander作用?有哪些要素?流程是怎樣的? 6.0.0.2 為什么一個線程只有一個Looper、只有一個MessageQueue,可以有多個Handle...

    Aomine 評論0 收藏0
  • 深入理解Python中的ThreadLocal變量(中)

    摘要:在深入理解中的變量上中我們看到的引入,使得可以很方便地在多線程環境中使用局部變量。特別需要注意的是,基類的并不會屏蔽派生類中的創建。到此,整個源碼核心部分已經理解的差不多了,只剩下用來執行清除工作。 在 深入理解Python中的ThreadLocal變量(上) 中我們看到 ThreadLocal 的引入,使得可以很方便地在多線程環境中使用局部變量。如此美妙的功能到底是怎樣實現的?如果你...

    DataPipeline 評論0 收藏0
  • Android異步消息機制

    摘要:在子線程中發送消息,主線程接受到消息并且處理邏輯。子線程往消息隊列發送消息,并且往管道文件寫數據,主線程即被喚醒,從管道文件讀取數據,主線程被喚醒只是為了讀取消息,當消息讀取完畢,再次睡眠。 目錄介紹 1.Handler的常見的使用方式 2.如何在子線程中定義Handler 3.主線程如何自動調用Looper.prepare() 4.Looper.prepare()方法源碼分析 5....

    blair 評論0 收藏0
  • 深入理解Python中的ThreadLocal變量(下)

    摘要:具體怎么實現的呢,思想其實特別簡單,我們在深入理解中的變量上一文的最后有提起過,就是創建一個全局字典,然后將線程或者協程標識符作為,相應線程或協程的局部數據作為。 在上篇我們看到了 ThreadLocal 變量的簡單使用,中篇對python中 ThreadLocal 的實現進行了分析,但故事還沒有結束。本篇我們一起來看下Werkzeug中ThreadLocal的設計。 Werkzeug...

    dadong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<