如何清除Python threading.local对象?

时间:2014-09-05 20:26:58

标签: python multithreading

如何清除Python threading.local()实例的所有属性?

1 个答案:

答案 0 :(得分:3)

您可以清除它的基础__dict__

>>> l = threading.local()
>>> l
<thread._local object at 0x7fe8d5af5fb0>
>>> l.ok = "yes"
>>> l.__dict__
{'ok': 'yes'}
>>> l.__dict__.clear()
>>> l.__dict__
{}
>>> l.ok
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'thread._local' object has no attribute 'ok'

直接访问__dict__被特别称为与local模块文档中的_threading_local对象进行交互的有效方式:

  

线程局部对象支持线程本地数据的管理。      如果您有想要成为线程本地的数据,只需创建      一个线程局部对象并使用其属性:

  >>> mydata = local()
  >>> mydata.number = 42
  >>> mydata.number
  42
     

您还可以访问local-object的字典:

  >>> mydata.__dict__
  {'number': 42}
  >>> mydata.__dict__.setdefault('widgets', [])
  []
  >>> mydata.widgets
  []