前回の記事では「マルチスレッド処理」について書きました。「python初心者が「マルチスレッド」を理解するには」
pythonのマルチプロセス処理の簡易まとめ
今回は「マルチプロセス処理」についての記事です。
今回はコードじゃなくてコメントで自分がまとめたものを記載しておこうと思います。
Pythonでマルチプロセスで使うモジュールやメソッド
モジュール | subprocess |
---|---|
メソッド | Popen(実行したいアプリのファイル名、) — 第二引数にファイル名を指定するとそのファイルを開いてくれる |
オブジェクトの処理 | ●Popenオブジェクト.poll() プロセスを実行していればNone 終了していれば0 エラーで終了した場合は1以外 ●Popenオブジェクト.wait() プロセスが終了をするのを待つ プログラムを止めることができる。 ●Popenオブジェクト.terminate() プロセスを終了する |
他のpythonプログラムの起動 | Popen([sys.executable, ‘hello.py’]) |
既定のアプリで起動 | Popen([‘satart’,’hello.txt’]) |
スレッドとの違い | スレッドは後追い処理だが、プロセスは完全に別々の処理 |
実行したいアプリのファイル名を調べるには | 右クリック→プロパディで確認できる |
pythonのマルチプロセスってどんなイメージ?
マルチスレッドはマラソンのトラック走者のように後追い的に処理するものだということはわかりました。マルチプロセス処理を例えるならこんな感じでしょうか?
この画像は阿修羅です。腕が複数生えてそれぞれの腕が独立して動いているイメージです。
ただわからないことがありました。阿修羅の腕を切っても阿修羅は死なないのです。腕をプロセスだとするなら阿修羅の胴体をタスクとしましょう。terminate()を使ってプロセスを終了させてもタスクは閉じてくれないんです。(阿修羅は死なない)
Popenを使ってアプリを起動しても、それを終了させてくれるメソッドがわかりませんでした。しかもterminate()でプロセスを終了した後にまたアプリを起動して.poll()で確認したらなぜかプロセスが終了していることになっています。
まだまだ理解が足りてない
Popen()には謎が残ってしまいました。Popenオブジェクトを変数に格納して、それをforループで回して電卓を2つ立ち上げようとしました。ですが、なぜかこれでは2つ起動してくれないです。また、プロセスが終了しても、アプリは閉じませんでした。
基本的なことが理解できていないみたいなので、またわかったらなにか書こうと思います。
コメント