xargsで並列処理してCPUを100%使い切ろう

Linux

背景

  • 6000枚の画像を一括変換したかったので。
  • 普通にmogrifyを打つだけだと1プロセスなので1コアしか使ってくれないです。
  • 最近のPCは1コアの周波数を低めにして、多くのコアを積んで処理を並列に動かすことによって高速化を行うのが主流です。

アプローチ

  • ちゃんと全てのコアを使い切って変換をする必要があります。
  • xargsコマンドを使うと並行処理を簡単に行えます。-Pで並列数、-nで1コマンド辺りの引数の数を指定します。-nは無くても良いですが1コマンドの起動コストを減らすために指定してあげるのが良いです。
  • ファイル名に半角スペースが入っている場合があるので、find側に-print0オプションと、xargs側に-0オプションを指定しています。
% find . -type f -print0 -name '*svg' | xargs -0 -n 5 -P 8 mogrify -format eps

コメント