threading.localとシニア

threading.local特徴:

あなたは(スレッドIDに基づいて固定値)の値にアクセスできるように、スレッドごとに①オープンスペース、

何threading.localを②flaskないが、コンテキスト管理フラスコのアイデアはthreading.local参考のためのものです。

③終値の前にスレッドが値をクリアした後に同じ、スレッドは閉じたまま。

通常のマルチスレッド

インポート時間
 インポートスレッド


クラスはFoo(オブジェクト):
         デフ __init__ (自己):
                self.num = 0 

VAL2 = フー()

デフタスク(I):
        val2.num = I 
        time.sleep( 1 )
         プリント(val2.num)

 I における範囲(4 ):
        T = threading.Thread(目標=タスク、引数= (I))
        )t.start(

结果:
 3 
3 
3 
3 
4个值全一样

 

threading.localマルチスレッディング

インポートのインポートスレッディング
 時に各スレッドの実行val1.xx = 1、内部スレッドは、この目的のためにスペースを開きます1 = xxを保存するために自分の店xxをピックアップしてval1.xxを、このスレッドに独自のメモリアドレスを見つける 
VAL1を= threading.local()

DEF タスク(I):
        val1.num = I 
        time.sleep( 1 )
         プリント(val1.num)

 I における範囲(4 ):
        T threading.Threadの=(目標=タスク、引数= ( I))
        t.start 

出力:
0
 1 
2 
3件
の異なる4つの結果

 

カスタムthreading.local

インポートスレッドは
 "" " 
ストレージ= {#カスタムような辞書を維持
{ 'X1':0}、1111 
1112:{ 'X1' :.} 1 
1113:{ 'X1':} 2 
1114:{「X1を':3} 
1115:{' X1「:4} 
} 
"" " 
クラスローカル(オブジェクト):
         DEF  __init__ (自己):
                物体__setattr__(セルフ、' ストレージ' 、{})

        DEF  __setattr__ (セルフ、キー、値):
                IDENT = threading.get_ident()     これは、上述したID上記スレッドである
                IF IDENT self.storage。
                        self.storage [IDENT] [キー]= 値
                 
                        self.storage [IDENT] = {キー:値} 

        DEF  __getattr__ (自己、項目):
                IDENT = threading.get_ident()     这个就是线程ID 
                場合 IDENT ない self.storage:
                         リターンリターンself.storage [ IDENT]に.get(アイテム)
局所 = ローカル()DEF タスク(引数):
        local.x1 = argに
         プリント(local.x1) I における範囲(5 ):
                




 
        T = threading.Thread(目標=タスク、引数= (I))
        t.start()

输出:
0
1
2
3
4

出力はあなたの別のスレッドのIDに基づいて異なる値になります

 強化されたカスタムthreading.local(フラスココンテキスト管理そう)

 

元のメンテナンスは、辞書や辞書であることがある:
 "" " 
ストレージ= { 
1111:{ 'X1':0}、
1112:{ 'X1' :. 1} 
1113:{ 'X1':2} 
1114:{ 'X1' :} 3 
1115:{ 'X1' :. 4} 
} 
"" " 
拡張メンテナンス辞書のリストを追加することは、辞書である:
" "" 
ストレージ= { 
1111:{ 'X1':[0,1]}、
1112 :{ 'X1':[0,1,2]} 
1113:{ 'X1':[0,1,3]} 
1114:{ 'X1':[0,1,5]} 
1115:{ 'X1' :[0,1,6]} 
} 
「」 " 
リストがスタックへとして保持(値を使用する[あれば追記が、添加され -1 ]、値をポップすることによって奪われている場合)、LIFO使用されます

インポートスレッディング
 "" " 
ストレージ= { 
1111:{ 'X1':[]}、
1112:{ 'X1 ':[]} 
1113:{' X1 ':[]} 
1114:{' X1 ':[]} 
1115:{' X1' :[]} 
1116:{' X1' :[]}
}
 ""」
クラスローカル(オブジェクト):
         デフ __init__ (自己):
                オブジェクト。__setattr__(自己、' ストレージ' 、{})

        デフ __setattr__ (自己、キー、値):
                IDENT = threading.get_ident()
                 もし IDENT self.storage:
                        self.storage [IDENT] [キー] .append(値)
                
                        self.storage [IDENT] = {キー:[値]} 

        DEF  __getattr__ (自己、項目):
                IDENT =threading.get_ident()
                 もし IDENT ない self.storage:
                         リターンリターン self.storage [IDENT] [アイテム] [ - 1 ] 
局所 = ローカル()DEF タスク(引数):
        local.x1 = argに
         プリント(local.x1) I における範囲(5 :)
        T = threading.Thread(目標=タスク、引数= (I)) 
        )(t.start 输出:0 1 2 3 4
                










 

おすすめ

転載: www.cnblogs.com/shengjunqiye/p/11923729.html