##
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={})

  このコンストラクタは常に引数とともに呼ばれるべきです。 引数:

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

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

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

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

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

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

`start`( | )

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

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

`run`( | )

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

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

`join`( | [timeout])

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

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

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

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

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

`getName`( | )

  スレッド名を返します。

`setName`( | name)

  スレッド名をセットします。

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

`isAlive`( | )

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

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

`isDaemon`( | )

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

`setDaemon`( | daemonic)

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

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

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