在Python中,所有内容都是共享的,但函数局部变量除外(因为每个函数调用都有自己的局部变量集,而线程始终是单独的函数调用。)即使如此,也只有变量本身(引用对象的名称)对于该功能而言是本地的;对象本身始终是全局的,任何事物都可以引用它们。
Thread在这方面,特定线程的对象不是特殊对象。如果将
Thread对象存储在所有线程都可以访问的位置(例如全局变量),则所有线程都可以访问该
Thread对象。如果要原子地修改另一个线程可以访问的
任何内容 ,则必须使用锁来保护它。当然,所有线程都必须共享此相同的锁,否则效果不佳。
如果您需要实际的线程本地存储,那就是其中的地方
threading.local。
threading.local线程之间不共享属性。每个线程仅看到其自身放置在其中的属性。如果您对它的实现感到好奇,请在标准库的_threading_local.py中找到源。



