Help us understand the problem. What is going on with this article?

並列処理学習1-子プロセスの管理

More than 1 year has passed since last update.

並列処理を行う利点は以下がある。
- 適切な利用によって処理を最適化
- コマンドラインインユーティリティ等の他ツールとの統合
- シェルスクリプトの肥大化を防ぎ、保守、運用を行いやすくする

それらを行うために、Pythonで書き直すのはたやすいこと。

subprocessの利用

Pythonでの並列処理の方法は複数存在するが、subprocessを利用するのがとても効果的。
subprocessを使用するのは簡単。

Popenコンストラクタで子プロセスを開始し、communicateメソッドにより処理を監視する事が出来る。
subprocessによって、親プロセスから子プロセスを完全に切り離すことが出来る。
また、communicateにて、子プロセス実行終了を待つことが出来る。

データのパイプ

子プロセスへデータをパイプして、出力を受け取ることも出来る。

Popen時にPopen時に、実行したい処理へデータを受け取るための設定を行い、行った設定に対してデータのパイプを行い、オブジェクトを取得しリスト等でデータを保持。
その後、subprocess等を用いて、順次、オブジェクトの処理出力を受け取る事が出来る。

子プロセスの出力結果を、さらに子プロセスに渡すことも可能。
ひとつの子プロセス内の一つのプロセス(Popen-A)が終わったら、次の目的のプロセスプロセス(Popen-B)へ、一つ前のプロセス(Popen-A)を渡す方法でデータのパイプが行える。

補足

プロセスの終了が正確に行われているか気になるようであれば、communicateメソッドへtimeout引数を渡せばいい。
もし、想定した時間以上経っても終了していない場合は、例外は返され、処理が終了する。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away