我的软件中有许多线程都做同样的事情,但每个线程都是从不同的“视角”运行。我有一个“StateModel”对象,在整个线程和线程中的对象中使用,但StateModel需要针对每个线程进行不同的计算。
我不喜欢将StateModel对象传递给需要它的所有函数。通常,我会创建一个模块变量,整个程序中的所有对象都可以从模块变量中引用相同的数据。但是,有没有办法让静态模块变量的概念与每个线程不同且独立?一种静态的Thread变量?
感谢。
答案 0 :(得分:3)
这是在threading.local
中实施的。
我倾向于不喜欢主要引用文档的答案,但是......好吧,时间和地点适合一切。
表示线程本地数据的类。线程本地数据是数据 其值是特定于线程的。仅管理线程本地数据 创建本地(或子类)的实例并存储属性 它:
mydata = threading.local() mydata.x = 1
实例的值将是 不同的线程。
有关更多详细信息和大量示例,请参阅文档字符串
_threading_local
模块。
值得注意的是,你可以让你的类扩展threading.local
,突然你的类具有线程本地行为。