ホームページ  >  記事  >  バックエンド開発  >  Pythonでスレッドローカル変数を定義する方法

Pythonでスレッドローカル変数を定義する方法

(*-*)浩
(*-*)浩オリジナル
2019-07-04 13:54:332939ブラウズ

スレッドローカル変数という概念があります。一般的にマルチスレッドではグローバル変数をロックします。この変数は共有変数です。各スレッドは変数を読み書きできます。同期を保つためにシャックル処理を行います。

Pythonでスレッドローカル変数を定義する方法

しかし、いくつかの変数が初期化された後は、それらの変数が常に各スレッドに存在するようにしたいだけです。これは、スレッド内およびスレッド間の共有変数に相当します。これは分離されており、ローカル変数です。 Python スレッド モジュールは、ローカルと呼ばれるそのようなクラスを提供します。 (推奨学習: Python ビデオ チュートリアル )

ローカル変数を使用する場合、パラメーターを渡す必要があります。たとえば、プログラムで処理が必要な例があります。顧客アプリケーション: 顧客の場合、処理のために新しいスレッドが開かれ、顧客には名前、年齢、性別などの属性 (パラメータ) があります。 Python は、スレッド ローカル変数の転送を容易にする threading.local モジュールを提供します。次の例を直接見てください:

# /usr/bin/env python
# coding:utf-8


import threading

# Threading.local对象
ThreadLocalHelper = threading.local()
lock = threading.RLock()

class MyTheadEx(threading.Thread):
    def __init__(self, threadName, name, age, sex):
        super(MyTheadEx, self).__init__(name=threadName)
        self.__name = name
        self.__age = age
        self.__sex = sex

    def run(self):
        global ThreadLocalHelper
        ThreadLocalHelper.ThreadName = self.name
        ThreadLocalHelper.Name = self.__name
        ThreadLocalHelper.Age = self.__age
        ThreadLocalHelper.Sex = self.__sex
        MyTheadEx.ThreadPoc()

    # 线程处理函数
    @staticmethod
    def ThreadPoc():
        lock.acquire()
        try:
            print 'Thread={id}'.format(id=ThreadLocalHelper.ThreadName)
            print 'Name={name}'.format(name=ThreadLocalHelper.Name)
            print 'Age={age}'.format(age=ThreadLocalHelper.Age)
            print 'Sex={sex}'.format(sex=ThreadLocalHelper.Sex)
            print '----------'
        finally:
            lock.release()

if __name__ == '__main__':
    Tom = {'Name': 'tom', 'Age': 20, 'Sex': 'man'}
    xiaohua = {'Name': 'xiaohua', 'Age': 18, 'Sex': 'woman'}
    Andy = {'Name': 'Andy', 'Age': 40, 'Sex': 'man'}
    T = (Tom, xiaohua, Andy)
    threads = []
    for i in range(len(T)):
        t = MyTheadEx(threadName='id_{0}'.format(i), name=T[i]['Name'], age=T[i]['Age'], sex=T[i]['Sex'])
        threads.append(t)
    for i in range(len(threads)):
        threads[i].start()
    for i in range(len(threads)):
        threads[i].join()
    print 'All Done!!!'

各スレッドが相互に干渉することなく threading.local オブジェクトを読み書きできることがわかります。 threading.local を合理的に使用すると、各サブスレッドのデータ セキュリティを確保しながら、コード ロジックを大幅に簡素化できます。 Threading.local の最大の用途は、HTTP リクエストを行うときにユーザー情報をバインドし、各ユーザー スレッドが相互に干渉することなく独自のリソースに簡単にアクセスできるようにすることです。

Python 関連の技術記事の詳細については、Python チュートリアル 列にアクセスして学習してください。

以上がPythonでスレッドローカル変数を定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。