Python中的“线程本地存储”是什么,为什么我需要它?

在Python中,具体来说,变量如何在线程之间共享?

虽然我已经使用threading.Thread之前我从来没有真正理解或看到变量如何共享的例子。它们在主线程和子进程之间还是只在子进程之间共享?什么时候需要使用线程本地存储来避免这种共享?

我已经看到许多警告使用锁同步线程之间的共享数据的访问,但我还没有看到一个很好的例子。

提前致谢!

在Python中,一切都是共享的,除了函数局部变量(因为每个函数调用都有自己的局部变量集合,并且线程总是分开的函数调用)。即使这样,只有变量本身(引用对象的名称)是函数的局部函数;对象本身总是全局的,任何东西都可以引用它们。
在这方面,特定线程的Thread对象不是一个特殊对象。如果将Thread对象存储在所有线程都可以访问的地方(如全局变量),那么所有线程都可以访问那个Thread对象。如果你想原子修改任何你不只是创建在这个非常相同的线程,并没有存储在任何其他线程可以得到它,你必须通过锁来保护它。并且所有线程必须当然共享这个非常相同的锁,或者它不会是非常有效的。

如果你想要实际的线程本地存储,这是threading.local的地方。threading.local的属性不共享线程之间;每个线程只看到它自己放置在那里的属性。如果你对它的实现感兴趣,源代码在标准库的_threading_local.py中。

http://stackoverflow.com/questions/104983/what-is-thread-local-storage-in-python-and-why-do-i-need-it

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Python中的“线程本地存储”是什么,为什么我需要它?