2011-07-01 28 views
4

子スレッドから親IDまたは名前を取得する方法を探しています。 例では、MainThreadとしてメインスレッドがあります。このスレッドで私はいくつかの新しいスレッドを作成します。次に、私はthreading.enumerate()を使って、実行中のすべてのスレッドへの参照を取得し、子スレッドの1つを選択し、何らかの形でMainThreadのIDまたは名前を取得します。それを行う方法はありますか?Pythonスレッド - 親ID /名前を取得する方法

答えて

3

parentを設定し、スレッドのサブクラスを作りますinitの属性:

from threading import current_thread 

class MyThread(threading.Thread): 
    def __init__(self, *args, **kwargs): 
     self.parent = current_thread() 
     Thread.__init__(self, *args, **kwargs) 

を次に、スレッドは、このクラスで始まっ内の仕事をしながら、私たちは産卵Threadオブジェクトを取得するにはcurrent_thread().parentにアクセスすることができます。

+0

私は好きです。この考え方には、いくつかの自己チェック可能性があります。親is_alive()でない場合は、mythread.parentをFalseを返すプロパティにすることができます。または、インスタンス属性 "parent"の代わりに "parent"というクラス属性を持つMainThreadChildクラスを作成して、このタイプのすべてのスレッドが基本的に特定のスレッドにバインドされることを期待してください。 – DevPlayer

1

あなたは子スレッドの親スレッドへの参照を持っている...そして、それはあなたが作成上の子スレッドにMainThreadの名前を渡すこともできますID

1

だ得ることができます。

別のオプション、あなたはクラスで作業している場合は、子スレッドがMainThreadのクラスからメソッドを指すの目標を持つことである。

class MainThread: 
    name = "MainThreadName" 

    def child_thread_run(self): 
     print self.name # Will print "MainThreadName", even from a child thread 

    def run(self): 
     child = threading.Thread(target=self.child_thread_run) 
     child.start() 
関連する問題