2014年9月2日火曜日

並列処理の話(その2) Windowsでコマンドを並列実行する(前編)


こんにちは。大須賀です。

並列処理のお話しをさせていただいていますが、Windowsでコンソールコマンドを並列処理させるにはどうしたらよいでしょうか。

例として、ちょっと時間のかかるコマンドとして以下のものを使いましょう。
コマンドプロンプトを立ち上げてコマンドを打ってみてください。

 C:\Users\osuga>tree c:\

Windowsのシステムドライブを表示するため、ファイルのツリー構造が延々表示されてくると思います。

通常のコンソールコマンドの場合、コマンドを打ったら、処理が終わるまでプロンプトは返ってきません。

これを、非同期に実行するには、STARTコマンドを使います。

 C:\Users\osuga>start tree c:\
コマンドを打ったウィンドウとは別にウインドウが起動され、そちらでtreeコマンドが実行されたことと思います。また、コマンドを打ったウインドウはtreeの終了を待たずに次のコマンド入力待ちのプロンプトが出ているはずです。

次に、このコマンドを2つ同時に実行してみます。
メモ帳を起動してバッチファイルを作成します。

 C:\Users\osuga>notepad tst.bat




これを保存し、実行してみてください。

 C:\Users\osuga>tst.bat

先ほどと同じtreeコマンドを実行するウインドウが今度は2つ出て、同時に実行されます。

データ加工に使用するETLツールには、コマンドラインからの起動を行う機能が装備されているので、treeコマンドと同じように複数の加工ジョブ(加工手順を実行する単位)を並行動作させることが可能です。(ツールによっては外部から並行起動を許していないものや、同じジョブを同時に起動できないものがあるので注意が必要です)

このように、コンソールコマンドを同時に起動するのはごく簡単です。しかし、これでは困ることがあります。コマンドの終了待ちが行われないので、後続の処理が待たずにすぐに実行されてしまいます。
きちんと処理を行うためには、2つのコマンドが終了したことを、どうにかして判断する必要があります。

大きなプロジェクトでは運用ツールを使ってジョブの実行順制御を行うのですが、次回は、これをバッチプログラム中で簡単に実行する方法を解説します。




0 件のコメント:

コメントを投稿