@rabirgo です。
xargs という Linux コマンドでハマりました。
何かの役にたつか分かりませんが勘違いしてたことを共有します。
簡単に並行プロセスを実行できる xargs
xargs は Linux で使用できるコマンドです。
Wikipedia よると「改行等で区切られた標準入力を読み込み、空白で区切られた1行の文字列へ加工し、それを引数として指定したコマンドへ渡して実行させる」です。さっぱりわかりませんね。笑
似たような処理を簡単に何度も実行するって話なんですが、通常は直列で処理するから遅いんですね。高速化するために並列処理したい。
並列で処理する手段は幾つかあるみたいで、一番簡単なのは xargs -P というオプションかなと思います。xargs -P4 なら最大4並列で処理してくれます。
各プロセスの実行結果が分からない
今回ハマったのが、並列処理ごとに実行結果を返してくれてると思い込んでしまったことです。
この処理で失敗してるはずなのに上手く実行結果が取得できないな…と悩んでしまいました。
例えば
seq 4 | xargs -P2 touch
だと 1 2 3 4 というファイルが作成されますが、それぞれのファイルが本当に作成されたか?をステータスで確認することができません。
仕様としては、どれか一つが失敗すれば 123 が返却されるようです。
0 成功
123 command 実行のいずれかにおいて、 1-125 の戻り値が返った。
124 command が 255 を戻り値として返した。
125 command がシグナルによって kill された。
126 command が実行できない。
127 command が見つからない。
1 他のエラーが起こった。
それぞれの command でエラーが発生した場合に処理を分岐させたい場合はシェルスクリプトにエラー処理を書いて、そのシェルスクリプトをcommand として実行必要があるんじゃないかなと思います。
さいごに
データ数の多い大規模システムだと高速化、並列化の知識が重要になります。
SIer 時代は社内システム構築が多かったからあまり高速化ってやらなかったんですよね。趣味レベル。勉強になりました。
今日の世界一周絶景日めくりカレンダー
日めくりカレンダーを紹介しています。
キャメロンハイランド

マレーシアの軽井沢と言われてるそうで、菊の産地だそうです。日本の菊はキャメロンハイランドから送られてきてるとのこと。国花である菊を輸入してるとは思わなかった。