Python threading.local是否使用锁进行访问?
是否在以下声明的封面下进行了Python threading.local是否使用锁进行访问?,python,multithreading,python-multithreading,Python,Multithreading,Python Multithreading,是否在以下声明的封面下进行了锁定。获取/释放: my_thread_local = threading.local() my_thread_local.some_value = 1 这个怎么样: local_variable = my_thread_local.some_value 仅当回退实施正在使用时。 如果没有提供线程本地存储(即,如果编译解释器时未定义Py\u HAVE\u NATIVE\u TLS),则将使用包含显式锁定的实现 在具有适当本机实现的平台上,因此Python运行时不需
锁定。获取/释放:
my_thread_local = threading.local()
my_thread_local.some_value = 1
这个怎么样:
local_variable = my_thread_local.some_value
仅当回退实施正在使用时。
如果没有提供线程本地存储(即,如果编译解释器时未定义Py\u HAVE\u NATIVE\u TLS
),则将使用包含显式锁定的实现
在具有适当本机实现的平台上,因此Python运行时不需要模拟此功能,也不需要在Python运行时层锁定
在撰写本文时(2017年7月),Python3开发分支的回退实现(不再有任何用于BeOS或以前支持的其他模糊操作系统的线程模块)。因此,在Python 3的未来版本中,线程本地存储的本机版本将始终在线程可用时使用
流程图:
- 您使用的是Python2.x吗?
- 你在Windows上吗?本机线程本地存储可用
- 您是否在任何非Windows平台上?Python使用基于锁定的实现
- 您使用的是Python 3.1还是更高版本?
- 你在Windows上吗?本机线程本地存储可用
- 您是否在现代Linux、MacOS或其他实现POSIX线程的平台上?本机线程本地存储可用
- 您是否在不支持pthreadsapi的非Windows平台上?要么根本不支持线程,要么线程本地存储将涉及锁定
(这里有意不介绍Python 3.0:2.7和3.1及更高版本中的本机线程本地存储实现在3.0中与其他版本中的代码不在同一位置,我认为不值得花时间深入研究以确定该功能是否已临时移动或是否已被删除。)(完全不见了).缩写:这是一个实现细节,取决于编译Python解释器所使用的操作系统以及解释器的特定版本。不存在一个总是正确的规范答案。@CharlesDuffy:绝对存在一个总是正确的规范答案。这是d永恒的软件——而不是概率物理学,这让你在这里的反驳更令人头痛。
@CecilCurry,实现不是语言本身。可以为实现锁定东西,但不能为语言锁定,也不能为写兼容的代码而锁定(不只是针对语言规范或该规范的实现的新版本进行未来验证,还包括现有规范的新实现——请参见f/e IronPython、Jython、Stackless Python等)区分这些概念至关重要。