threading.local 是否使用锁进行访问?
Does threading.local use locks for access?
是否有Lock.acquire/release
在下面的语句中进行了幕后操作:
my_thread_local = threading.local()
my_thread_local.some_value = 1
这个怎么样:
local_variable = my_thread_local.some_value
仅当回退实施正在使用时。
如果未另外提供线程本地存储(即,如果编译解释器时未定义 Py_HAVE_NATIVE_TLS
),将使用涉及显式锁定的实现。
在具有适当本机实现的平台上,因此不需要 Python 运行时来模拟此功能,因此不需要在 Python 运行时层锁定。
截至撰写本文时(2017 年 7 月),Python 3 开发分支的回退实现 was recently removed(不再 有 任何BeOS 或其他以前支持的模糊操作系统的线程模块)。因此,在 Python 3 的未来版本中,线程本地存储的本机版本将 始终 在线程完全可用时使用。
流程图:
- 你在 Python 2.x 吗?
- 你在Windows吗? 本机线程本地存储可用。
- 您是否使用任何非Windows平台? Python 正在使用基于锁定的实现。
- 您使用的是 Python 3.1 或更高版本吗?
- 你在Windows吗? 本机线程本地存储可用。
- 您使用的是现代 Linux、MacOS 还是其他实现了 POSIX 线程的平台? 本机线程本地存储可用。
- 您是否在不支持 pthreads API 的非 Windows 平台上? 您要么根本没有线程支持,要么线程本地存储将涉及锁定。
(Python 3.0 有意未在此处涵盖:2.7 和 3.1 及更高版本中存在的本机线程本地存储实现在 3.0 中不存在于同一位置它们在其他版本中托管的代码,我认为不值得花时间深入研究以确定功能是否已暂时移动或是否完全缺失)。
是否有Lock.acquire/release
在下面的语句中进行了幕后操作:
my_thread_local = threading.local()
my_thread_local.some_value = 1
这个怎么样:
local_variable = my_thread_local.some_value
仅当回退实施正在使用时。
如果未另外提供线程本地存储(即,如果编译解释器时未定义 Py_HAVE_NATIVE_TLS
),将使用涉及显式锁定的实现。
在具有适当本机实现的平台上,因此不需要 Python 运行时来模拟此功能,因此不需要在 Python 运行时层锁定。
截至撰写本文时(2017 年 7 月),Python 3 开发分支的回退实现 was recently removed(不再 有 任何BeOS 或其他以前支持的模糊操作系统的线程模块)。因此,在 Python 3 的未来版本中,线程本地存储的本机版本将 始终 在线程完全可用时使用。
流程图:
- 你在 Python 2.x 吗?
- 你在Windows吗? 本机线程本地存储可用。
- 您是否使用任何非Windows平台? Python 正在使用基于锁定的实现。
- 您使用的是 Python 3.1 或更高版本吗?
- 你在Windows吗? 本机线程本地存储可用。
- 您使用的是现代 Linux、MacOS 还是其他实现了 POSIX 线程的平台? 本机线程本地存储可用。
- 您是否在不支持 pthreads API 的非 Windows 平台上? 您要么根本没有线程支持,要么线程本地存储将涉及锁定。
(Python 3.0 有意未在此处涵盖:2.7 和 3.1 及更高版本中存在的本机线程本地存储实现在 3.0 中不存在于同一位置它们在其他版本中托管的代码,我认为不值得花时间深入研究以确定功能是否已暂时移动或是否完全缺失)。