2016-04-27 74 views
0

我在我的软件中有许多线程都做同样的事情,但每个线程都是从不同的“角度”操作的。我有一个“StateModel”对象,用于整个线程和线程内的对象,但是StateModel需要为每个线程计算不同的值。Python静态线程变量

我不喜欢将StateModel对象传递给所有需要它的函数的想法。通常,我会创建一个模块变量,整个程序中的所有对象都可以引用来自模块变量的相同数据。但是,有没有办法让这个静态模块变量的概念对每个线程都是不同的和独立的?一种静态的Thread变量?

谢谢。

+1

对于这种用例,您可能最好使用多处理而不是多线程。 https://docs.python.org/2/library/multiprocessing.html – WreckeR

+0

“per-thread static variable”的概念通常称为线程本地存储(TLS)(不仅在python中)。由roippi提供的答案引用了python提供的TLS实现。 – pasztorpisti

回答

2

这在threading.local中实施。

我倾向于不喜欢大多数引用文档的答案,但是......好吧,一切的时间和地点。

表示线程本地数据的类。线程本地数据是其值为线程特定的数据 。要管理线程本地数据,只是 创建的本地实例(或子类),并存储在 它的属性:

mydata = threading.local() 
mydata.x = 1 

实例的值将 单独的线程不同。

有关更多详细信息和大量示例,请参阅_threading_local模块的文档字符串 。

值得注意的是,您可以让您的课程延伸至threading.local,并且您的班级突然出现线程本地行为。

+0

很好的回答!我不知道为什么我在Google上搜索时无法找到它。我想我正在寻找错误的关键词。感谢Roippi! – Crbreingan