在Python中,threading.local()
是一个线程本地数据存储的机制,它允许在不同线程中访问和修改的数据在其他线程中是独立的。下面是一个使用threading.local()
的代码示例:
import threading
# 创建ThreadLocal对象
mydata = threading.local()
# 在不同模块中定义函数
def set_data(data):
# 设置当前线程的数据
mydata.value = data
def get_data():
# 获取当前线程的数据
return mydata.value
# 在不同线程中使用数据
def worker1():
set_data("Hello from worker1")
print("worker1 data:", get_data())
def worker2():
set_data("Hello from worker2")
print("worker2 data:", get_data())
# 创建线程
t1 = threading.Thread(target=worker1)
t2 = threading.Thread(target=worker2)
# 启动线程
t1.start()
t2.start()
# 等待线程结束
t1.join()
t2.join()
在上面的示例中,我们创建了一个threading.local()
对象mydata
,它可以在不同模块的函数中共享。在set_data()
函数中,我们可以通过mydata.value
来设置当前线程的数据。在get_data()
函数中,我们可以通过mydata.value
来获取当前线程的数据。
在worker1()
和worker2()
函数中,我们分别在不同的线程中设置和获取数据。在主线程中,我们创建了两个线程t1
和t2
,并分别启动它们。最后,我们使用join()
方法等待线程结束。
运行上述代码,输出应为:
worker1 data: Hello from worker1
worker2 data: Hello from worker2
可以看到,每个线程中的数据是独立的,互不干扰。这就是使用threading.local()
实现不同模块中共享数据的方法。