グローバル変数ThreadLocalのスレッド

スレッド内のグローバル変数-ThreadLocal

  • 各スレッドに値で機能のみを使用し、変数の値を取得しますが、マルチレベルの機能のために、パラメータ渡しはあまりにも面倒です

  • ThreadLocalのソリューション

      import threading  
    
      
      local_school = threading.local()  
    
      def process_student():  
          # 获取当前线程关联的studnet  
          std = local_school.student  
          # 对当前线程的全局变量拥有修改权  
          local_school.student = 'my'+local_school.student  
          print("hello, %s (in %s)" % (std, threading.current_thread().name))  
    
      def process_stu():  
          # 对当前线程的全局变量拥有修改权  
          std = local_school.student  
          print("hello, %s (in %s)" % (std, threading.current_thread().name))  
    
      def process_thread(name):  
          # 绑定ThreadLocal的studnet  
          local_school.student = name  
          process_student()  
          process_stu()  
          print(local_school.student)  
    
      t1 = threading.Thread(target大专栏  线程全局变量ThreadLocaltor">=process_thread, args=('Alce',), name="Thread-A")  
      t2 = threading.Thread(target=process_thread, args=('Bob',), name="Thread-B")  
      t1.start()  
      t2.start()  
      t1.join()  
      t2.join()  

    輸出

      hello, Alce (in Thread-A)  
      hello, myAlce (in Thread-A)  
      myAlce  
      hello, Bob (in Thread-B)  
      hello, myBob (in Thread-B)  
      myBob  
  • 分析
    グローバル変数はThreadLocalをオブジェクトは、あなたがたが互いに独立して、書いて、各スレッドの学生の属性を読み取ることができlocal_schoolです。あなたはグローバル変数としてlocal_schoolことができますが、干渉することなく読み取ることができlocal_school.studentローカル変数がスレッドあるとして各属性は、それは管理の問題、ThreadLocalの内部ハンドルをロックしません。

    グローバル変数local_schoolだけでなくlocal_school.studentで、また他の変数、などlocal_school.teacherなどなどに結合することができ、辞書であるとして、それを理解することができます。

    ハンドラスレッドへのすべての呼び出しが簡単にこれらのリソースにアクセスできるように、ThreadLocalの最も一般的な場所は、スレッドごとにデータベース接続、HTTPリクエスト、ユーザーのID情報を結合さ

おすすめ

転載: www.cnblogs.com/wangziqiang123/p/11710799.html