7.5 threading -- 高水準のスレッドインタフェース

このモジュールでは、高水準のスレッドインタフェースを より低水準なthread モジュールの上に構築しています。

また、thread がないためにthreading を使えないような 状況向けにdummy_threading を提供しています。

このモジュールでは以下のような関数とオブジェクトを定義しています:

activeCount( )
現在のアクティブなThreadオブジェクトの数を返します。 この数は enumerate() の返すリストの長さと同じです。

Condition( )
新しい条件変数 (condition variable) オブジェクトを返すファクトリ関数です。 条件変数を使うと、ある複数のスレッドを別のスレッドの通知があるまで 待機させられます。

currentThread( )
関数を呼び出している処理のスレッドに対応する Thread オブジェクトを 返します。関数を呼び出している処理のスレッドが threading モジュール で生成したものでない場合、限定的な機能しかもたないダミースレッドオブジェクト を返します。

enumerate( )
現在アクティブな Thread オブジェクト全てのリストを返します。 リストには、デーモンスレッド (daemonic thread)、 currentThread() の生成するダミースレッドオブジェクト、 そして主スレッドが入ります。終了したスレッドとまだ開始していないスレッド は入りません。

Event( )
新たなイベントオブジェクトを返すファクトリ関数です。 イベントは set() メソッドを使うと True に、 clear() メソッドを使うと False にセットされるような フラグを管理します。wait() メソッドは、全てのフラグが 真になるまでブロックするようになっています。

Lock( )
新しいプリミティブロック (primitive lock) オブジェクトを返すファクトリ 関数です。 スレッドが一度プリミティブロックを獲得すると、それ以後のロック獲得の試みは ロックが解放されるまでブロックします。どのスレッドでもロックを解放できます。

RLock( )
新しい再入可能ロックオブジェクトを返すファクトリ関数です。 再入可能ロックはそれを獲得したスレッドによって解放されなければなりません。 いったんスレッドが再入可能ロックを獲得すると、 同じスレッドはブロックされずにもう一度それを獲得できます; そのスレッドは獲得した回数だけ解放しなければいけません。

Semaphore( [value])
新しいセマフォ (semaphore) オブジェクトを返すファクトリ関数です。 セマフォは、release()を呼び出した数からacquire() を呼び出した数を引き、初期値を足した値を表すカウンタを管理します。 acquire()メソッドは、カウンタの値を負にせずに処理を戻せるまで 必要ならば処理をブロックします。 value を指定しない場合、デフォルトの値は 1 になります。

BoundedSemaphore( [value])
新しい有限セマフォ (bounded semaphore) オブジェクトを返す ファクトリ関数です。有限セマフォは、現在の値が初期値を超過しないよう チェックを行います。超過を起こした場合、ValueError を 送出します。たいていの場合、セマフォは限られた容量のリソースを 保護するために使われるものです。従って、あまりにも頻繁なセマフォの解放は バグが生じているしるしです。 value を指定しない場合、デフォルトの値は 1 になります。

class Thread
処理中のスレッドを表すクラスです。 このクラスは制限のある範囲内で安全にサブクラス化できます。

class Timer
指定時間経過後に関数を実行するスレッドです。

settrace( func)
threading モジュールを使って開始した全てのスレッドに トレース関数 を設定します。 func は各スレッドのrun() を呼び出す前に スレッドのsys.settrace() に渡されます。 バージョン2.3 以降で新規追加された 仕様です。

setprofile( func)
threading モジュールを使って開始した全てのスレッドに プロファイル関数 を設定します。 func は各スレッドのrun() を呼び出す前に スレッドのsys.settrace() に渡されます。 バージョン2.3 以降で新規追加された 仕様です。

オブジェクトの詳細なインターフェースを以下に説明します。

このモジュールのおおまかな設計は Java のスレッドモデルに基づいています。 とはいえ、Java がロックと条件変数を全てのオブジェクトの基本的な挙動に しているのに対し、 Python ではこれらを別個のオブジェクトに分けています。 Python の Thread クラスがサポートしているのは Java の Thread クラスの挙動のサブセットにすぎません; 現状では、優先度 (priority)や スレッドグループがなく、スレッドの破壊 (destroy)、中断 (stop)、 一時停止 (suspend)、復帰 (resume)、割り込み (interrupt) は行えません。 Java の Thread クラスにおける静的メソッドに対応する機能が実装されている 場合には、、モジュールレベルの関数になっています。

以下に説明するメソッドは全て原子的 (atomic) に実行されます。



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