2016-04-27 13 views
0

私のソフトウェアには、すべて同じことをするスレッドがいくつかありますが、各スレッドは異なる「パースペクティブ」から動作します。スレッドとスレッド内のオブジェクト全体で使用される "StateModel"オブジェクトがありますが、スレッドごとにStateModelを別々に計算する必要があります。Python静的スレッド変数

私は、StateModelオブジェクトを必要とするすべての関数に渡すという考えが嫌いです。通常、私はモジュール変数を作成し、プログラム全体のすべてのオブジェクトはモジュール変数から同じデータを参照できます。しかし、スレッドごとに異なる独立した静的なモジュール変数の概念を持つ方法はありますか?スレッド変数の一種?

ありがとうございました。

+1

このユースケースでは、マルチスレッドの代わりにマルチプロセッシングを使用する方がよい場合があります。 https://docs.python.org/2/library/multiprocessing.html – WreckeR

+0

「スレッドごとの静的変数」の概念は、スレッドローカルストレージ(TLS)と呼ばれています(Pythonだけでなく)。 roippiが提供する答えは、Pythonが提供するTLS実装を参照しています。 – pasztorpisti

答えて

2

threading.localで実装されています。

私はほとんどの引用符で - ドキュメントの答えを嫌う傾向がありますが...すべての時間と場所。

スレッドローカルデータを表すクラス。スレッドローカルデータは、値がスレッド固有のデータ です。スレッドローカルデータを管理するには、ちょうど 地元のインスタンス(またはそのサブクラス)を作成し、ストアは それに属性:

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

インスタンスの値がされる別々のスレッドごとに異なる 。

詳細および詳細な例については、_threading_localモジュールのドキュメント文字列 を参照してください。

あなたのクラスをthreading.localに拡張するだけで、突然クラスがスレッドローカルな振る舞いをすることができます。

+0

すばらしい答え!なぜ私はグーグルでこれを見つけることができなかったのか分かりません。私は間違ったキーワードを探していたと思う。ありがとうRoippi! – Crbreingan