线程里的全局变量threading.local
2014年1月09日 17:09
通常情况下,子线程可以访问主线程中的变量,并且可以修改它。
如果线程希望有自己的变量,不允许其它线程修改。这种情况怎么办?
利用threading.local模块就可以解决这种问题。
#encoding=utf-8 from threading import local, Thread, currentThread threadeddict = local() threadeddict.name = "main" ctx = {"username": "abc"} class LocalThread(Thread): def run(self): print "-----local-------" print currentThread() print threadeddict.__dict__ # 可以访问到主线程中的变量,但是访问不了它的内容 print ctx # 变量和内容都可以访问 threadeddict.name = self.getName() # 改变值不会影响主线程 print threadeddict.__dict__ if __name__ == '__main__': print "-----main-------" print currentThread() print threadeddict.__dict__ A = LocalThread() A.start() A.join() print "-----main-------" print currentThread() print threadeddict.__dict__
ctx变量对子线程而言有两个特征:
1.全局的(子线程内部都可访问)
2.可以访问修改的
threadeddict对子线程而言只有一个特征:全局的。只剩下一个全局变量名。