通常情况下,子线程可以访问主线程中的变量,并且可以修改它。
如果线程希望有自己的变量,不允许其它线程修改。这种情况怎么办?
利用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对子线程而言只有一个特征:全局的。只剩下一个全局变量名。