並列処理を行う利点は以下がある。
- 適切な利用によって処理を最適化
- コマンドラインインユーティリティ等の他ツールとの統合
- シェルスクリプトの肥大化を防ぎ、保守、運用を行いやすくする
それらを行うために、Pythonで書き直すのはたやすいこと。
subprocessの利用
Pythonでの並列処理の方法は複数存在するが、subprocessを利用するのがとても効果的。
subprocessを使用するのは簡単。
Popenコンストラクタで子プロセスを開始し、communicateメソッドにより処理を監視する事が出来る。
subprocessによって、親プロセスから子プロセスを完全に切り離すことが出来る。
また、communicateにて、子プロセス実行終了を待つことが出来る。
データのパイプ
子プロセスへデータをパイプして、出力を受け取ることも出来る。
Popen時にPopen時に、実行したい処理へデータを受け取るための設定を行い、行った設定に対してデータのパイプを行い、オブジェクトを取得しリスト等でデータを保持。
その後、subprocess等を用いて、順次、オブジェクトの処理出力を受け取る事が出来る。
子プロセスの出力結果を、さらに子プロセスに渡すことも可能。
ひとつの子プロセス内の一つのプロセス(Popen-A)が終わったら、次の目的のプロセスプロセス(Popen-B)へ、一つ前のプロセス(Popen-A)を渡す方法でデータのパイプが行える。
補足
プロセスの終了が正確に行われているか気になるようであれば、communicateメソッドへtimeout引数を渡せばいい。
もし、想定した時間以上経っても終了していない場合は、例外は返され、処理が終了する。