Pythonのthreadingモジュールを使うときのスレッド識別子

Pythonのthreadingモジュールを使うときに注意すること。

pythonプログラムの中で、別のプログラムを実行させたいときにthreadingモジュールを使って、別スレッドで実行させる。このとき、生成したスレッドのID(スレッド識別子)を憶えておきたいのだが、何か便利なメソッドはないかと確認する。

http://www.python.jp/doc/2.6/library/threading.html

すると、Python2.6以降であれば、Thread.ident というメソッドが利用できることが分かる。このメソッドにより、スレッドの識別子を得ることができる。

ところで、この別スレッドとして投げたプログラムは、固有のプロセスID(PID)を持っているわけで、割り振られたスレッド識別子とプロセスIDが一致するならば、非常に便利で都合がよい。

プロセスIDは、「ps -ax」コマンドや、Windowsであればタスクマネージャから確認することができる。そこで、プログラムを別スレッドで実行したときに、identメソッドが返す値と、OSが管理するPIDの値を比べてみたが一致しなかった。

pythonから制御できるスレッドの識別子と、OSが管理しているプロセスIDとは全く別物のようだ。そうなると、生成したスレッドのIDを憶えておいても、これまた別のpythonプログラムから、実行途中のスレッドを直接制御することはできそうにない。

無理やりpythonプログラムから制御しようとしたら、Linuxのコマンドベースで、os.system('ps ax') かなにかで、PIDを取得してos.system('kill')、とかするしかないか。