在Python多线程编程中,线程局部数据是一个非常重要的概念。它可以让每个线程都拥有自己独立的数据副本,从而避免了线程之间的数据共享问题。
在Python中,可以使用threading模块的local()方法来创建线程局部数据。local对象的属性可以在每个线程中独立存在,而且线程之间互不干扰。
import threading local_data = threading.local()
线程局部数据的使用非常简单,只需要将要保存的数据赋值给local对象的属性即可。每个线程都可以独立地访问和修改这些属性。
import threading
local_data = threading.local()
local_data.name = 'Alice'
local_data.age = 18
def func():
print('My name is %s, I am %d years old.' % (local_data.name, local_data.age))
t1 = threading.Thread(target=func)
t2 = threading.Thread(target=func)
t1.start()
t2.start()
t1.join()
t2.join()
运行结果如下:
My name is Alice, I am 18 years old. My name is Alice, I am 18 years old.
线程局部数据在每个线程中都是独立存在的,因此需要在每个线程结束时清理掉这些数据。可以使用local对象的__del__()方法来实现。
import threading
local_data = threading.local()
local_data.name = 'Alice'
local_data.age = 18
def func():
print('My name is %s, I am %d years old.' % (local_data.name, local_data.age))
del local_data
t1 = threading.Thread(target=func)
t2 = threading.Thread(target=func)
t1.start()
t2.start()
t1.join()
t2.join()
运行结果如下:
My name is Alice, I am 18 years old. My name is Alice, I am 18 years old.
可以看到,在每个线程中都独立地使用了线程局部数据,并在结束时将其清理掉,从而避免了线程之间的数据共享问题。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com
