こんにちは。
最近いろいろごたついてて、ブログなんか更新してませんが、それなりに充実した生活を送っているのでご心配なくw
ところで、今日はいつもどおり Python の話題です。
いま、某 LUG であるプログラムを作っているのですが、その中でマルチスレッドを使えたらなーと思って、ちょっといじってみました。
マルチスレッドが使えると...:
- 複数の作業を並列して実行できる
- 一定間隔で何かを実行するような処理を簡単にできて便利。
- CPU を有効的に使える
などいろいろ利点がありますが、今回は主に 2 番目のものをターゲットにしてみました。
結局、1番目も関わってくるんですけどね。
Python でスレッドを生成するには、threading モジュールを使うのが便利です。
こいつを使うことで、簡単にスレッドをいじることができます。
使い方は threading.Thread を継承したクラスを作って、それのインスタンスを生成するとそれがスレッドの中で動くみたいな感じです。
コンストラクタで、threading.thread.__init__(self) を呼び出して、あとは run() メソッドを書いてあげます。
呼び出すときは、start() で呼び出しますが、start() の中で run() を呼び出して、その処理をスレッド内で実行するみたいな形です。
なので、メインの処理は基本的に run() の中に書きます。
簡単なサンプルを書いてみました。
10 秒おきに、何かを表示してくれるプログラムです。
無限ループの中に、何かやらせたい処理を書いて、sleep してるというかなり投げやりな感じです。
ただし、これ実行しないでください。
なぜかというと、スレッドが生き残っているとプログラムが終了しないんです。
スレッドの中で無限ループ処理しているので、これを実行すると、実は kill -kill しないと終了しない厄介なプロセスが出来上がりますw
これを回避するには setDaemon(boolean) を使います。
これを True にすることで、デーモンとして認識されるので、そいつが終了していなくても、それ以外のデーモンでないスレッドがすべて終了しているならプログラム全体が終了します。
サンプルはこんな感じ。
最後に time.sleep(30) を入れているのは、これを入れないとすぐに終了してしまうからです。
こうすることで、メインのプログラムが処理している裏で勝手に一定間隔で動いてくれるスレッドを生成することができました。
メインのプログラムが終わると勝手に一緒に終了してくれるので、使い勝手も素晴らしい。
というわけで、スレッドはいろいろなところに応用できると思います。
プログラムをすっきりさせるにはなかなか有効じゃないかなと。


コメントする