如何清空一个Python的threading.local对象?

6 投票
1 回答
3301 浏览
提问于 2025-04-20 02:19

我该如何清除Python中一个threading.local()实例的所有属性呢?

1 个回答

9

你可以清空它的底层 __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__ 被特别指出是与 _threading_local 模块中的 local 对象互动的有效方式:

线程本地对象支持线程本地数据的管理。 如果你有一些数据想要让它只在某个线程中使用,简单地创建一个线程本地对象并使用它的属性:

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

你也可以访问这个本地对象的字典:

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

撰写回答