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')、とかするしかないか。