线程局部存储(Thread-Local Storage)详解
线程局部存储(Thread-Local Storage)详解
1. 什么是线程局部存储?
线程局部存储(TLS)是一种机制,允许为每个线程维护独立的变量副本。即使多个线程访问同一个变量名,它们也会获取各自线程的独立值,互不干扰。
核心作用:解决多线程环境下共享变量导致的线程安全问题。
2. Python中的实现方式
Python通过threading.local)类实现线程局部存储。
特点:
每个线程访问local对象的属性时,实际访问的是线程独立的命名空间。
无需加锁,天然线程安全。
3. 示例代码
python
import threading
# 创建线程局部存储对象
local_data = threading.local()
def thread_task(thread_name):
# 每个线程独立设置属性
local_data.value = thread_name
print(f"线程 {thread_name}: local_data.value = {local_data.value}")
# 创建多个线程
threads = []
for i in range(3):
t = threading.Thread(target=thread_task, args=(f"Thread-{i}",))
threads.append(t)
t.start()
# 等待所有线程完成
for t in threads:
t.join()
输出:
线程 Thread-0: local_data.value = Thread-0
线程 Thread-1: local_data.value = Thread-1
线程 Thread-2: local_data.value = Thread-2
说明:每个线程访问local_data.value时,获取的是自己线程设置的独立值。
4. 典型应用场景
数据库连接池:
每个线程需要独立的数据库连接,避免连接冲突。
python
import threading
import sqlite3
db_local = threading.local()
def get_db_connection():
if not hasattr(db_local, "conn"):
db_local.co