7.5.6 Thread オブジェクト

このクラスは個別のスレッド中で実行される活動を表わします。 その活動を決定する方法は2つあり、呼出し可能オブジェクトをコンストラクタへ渡す、 またはサブクラスでrun()メソッドをオーバーライドするということです。 他のメソッド(コンストラクタを除く)はサブクラスでオーバーライドしては なりません。 言いかえれば、このクラスの__init__()run()メソッド だけをオーバーライドしてください。

いったんスレッドオブジェクトが作成されれば、その活動をスレッドの start()メソッドを呼ぶことによりスタートさせなければなりません。 これは、それぞれのスレッドのrun()メソッドを起動します。

スレッドの活動が始まると、そのスレッドは'生きていて(alive)' そして'活動している(active)'と考えられます (これらの概念は、ほとんど同じであるが、しかし全く同じではない; それらの定義は故意に多少曖昧になっています)。 それは run()メソッドが終了した時に、 またはunhandled例外が送出された時に、生きること活動することをやめます。 スレッドが生きていてもisAlive()メソッドはテストします。

他のスレッドはスレッドのjoin()メソッドを呼ぶことができます。 join()メソッドを呼ばれたスレッドが終了するまで、 呼出しスレッドをブロックします。

スレッドは名前を持っています。 その名前はコンストラクタへ渡すことができ、 setName()メソッドでセットし、 getName()メソッドで得ることができます。

スレッドは``デーモンスレッド''としてフラグすることができます。 このフラグの意味は、デーモンスレッドだけが残されたとき、 Pythonプログラム全体が終了するということです。 初期値は作成するスレッドから継承されます。 そのフラグはsetDaemon()メソッドでセットされ、 isDaemon()メソッドで得ることができます。

``メインスレッド''オブジェクトがあります。 これはPythonプログラムの最初のスレッドに相当します。 それはデーモンスレッドではありません。

``ダミースレッドオブジェクト''を作成することができます。 これは``エイリアンスレッド''に相当するスレッドオブジェクトです。 スレッドモジュールの外部でスタートするスレッドで、 直接Cコードで実装されているようなものです。 ダミースレッドオブジェクトは機能が制限されています。 それらは常に、生きていて(alive)、活動していて(active)、 デーモン(daemon)であるが、join()することはできません。 エイリアンスレッドの終了は検知することが不可能であるので、 それらは削除されません。

class Thread( group=None, target=None, name=None, args=(), kwargs={})
このコンストラクタは常に引数とともに呼ばれるべきです。 引数:

groupNoneでなければいけません。 ThreadGroupクラスが実装されたときのための、 将来の拡張として予約されています。

targetrun()メソッドによって呼出される、 呼出し可能オブジェクトです。 デフォルトはNoneであり、何も呼出さないことを意味します。

nameはスレッドの名前です。 デフォルトによって、ユニークな名前は``Thread-N''の形式で構築されます。 Nは小さな10進数です。

argstargetを呼出すときに渡される引数のタプルです。 デフォルトは()です。

kwargstargetを呼出すときに渡される引数の辞書です。 デフォルトは{}です。

サブクラスがコンストラクタをオーバーライドしたときは、 スレッドが何かを始める前に、基底クラスのコンストラクタ (Thread.__init__())を確実に呼出さなくてはいけません。

start( )
スレッドの活動を始めます。

これはスレッドオブジェクトにつき一度だけ呼出すようにします。 オブジェクトのrun()メソッドが個別のスレッドの中で 呼出されるよう準備します。

run( )
スレッドの活動を表すメソッドです。

あなたは、このメソッドをサブクラスでオーバーライドします。 標準のrun()メソッドは、targetとして オブジェクトのコンストラクタに渡された、呼出し可能オブジェクトを呼出します。 もしあるのなら、argskwargs引数から得られたシーケンシャルな、 あるいは辞書の引数を使います。

join( [timeout])
スレッドが終了するまで待ちます。 これはjoin()メソッドが呼ばれたスレッドが終了するまで、 呼出しスレッドをブロックします。 もしくは、unhandled例外が送出される、あるいはオプションのタイムアウトが 発生するまでブロックします。

timeout引数がNone以外で与えられたとき、 それはタイムアウトを秒(またはその分数)で指定する浮動小数です。

スレッドは何度でもjoin()されることができます。

スレッドは自身にjoinすることはできません。 デッドロックを引き起こします。

スレッドがスタートする前にjoin()を試みることは 間違っています。

getName( )
スレッド名を返します。

setName( name)
スレッド名をセットします。

名前は識別のためだけに使われる文字列です。 セマンティクスではありません。 複数のスレッドに同じ名前を与えることができます。 初期名はコンストラクタによってセットされます。

isAlive( )
スレッドが生きているかどうか返します。

多くの場合、スレッドはstart()メソッドを呼出した瞬間から run()メソッドが終了するまで生きています。

isDaemon( )
スレッドのデーモンフラグを返します。

setDaemon( daemonic)
スレッドのデーモンフラグを真偽値daemonicでセットします。 これはstart()を呼出す前に使わなくてはいけません。

初期値は作成するスレッドから継承されます。

デーモンでないアクティブなスレッドが残ってないとき、 Pythonプログラム全体が終了します。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。