在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