2016-04-01 4 views
1

私はクライアントが接続するときにスレッドを作成するサーバークラスを持っています。クライアントスレッドが起動されると、ソケットをリッスンし、ソケットがデータを受け取るとOnDataメソッドを呼び出します。これは、異なるクラスが将来継承できるベースのTCPサーバクラスであると考えられています。子クラスは、OnDataメソッドをオーバーライドするだけで済みます。スレッドにローカルなメンバー変数を作成する

私の質問は、スレッドにローカルなメンバー変数を作成する方法です。私は各スレッドが独自の状態を持つようにしたい。

答えて

1

各スレッドを 'ClientThread'クラスの新しいインスタンスにしてください。

このように、各スレッドは他のスレッドからアクセスできない独自のメンバ変数を取得します。

など。

次に、実行時にServerClassがインスタンスを生成するクラスを作成できます。

+0

これは悪い考えではありません。私はthreading.local()を使用して終わった。 – Taztingo

+0

これも同様に有効です。私はより一般的なOOPの答えになるように思ったので、どの言語にも適用できます。 –

0

あなたは、各スレッドにIDを渡し、そこから行くことができる:(IDは一意である場合)

class foo(object): 
    def __init__(self, _id): 
     self._id = _id 
     setattr(self, '_foo_%s' % str(_id), {'your': 'state'}) 

は今、各オブジェクトは、一意のフィールドがあります。

>>> f1 = foo(1) 
>>> f1._foo_1 
{'your': 'state'} 
>>> f1._foo_2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'foo' object has no attribute '_foo_2' 

はその助けをしていますか?