複数スレッドでコマンドを実行する

複数スレッドでコマンドを実行する

コマンドを実行しています(正確に言うとpngQuant:https://github.com/pornel/pngクエント)ターミナルウィンドウで。 4つの端末ウィンドウを開き、各ウィンドウでpngQuantコマンドを実行すると、同時に4倍速く、効果的に4倍の画像を圧縮できることがわかりました。

そのため、このアプローチを使用して圧縮したい画像の部分を各pngqunatプロセスに割り当てることで、複数のスレッドで複数のプロセスを効果的に作成しました。

私が行ったこれらのトリックを実行せずに複数のスレッドでコマンドを実行できますか?私が言いたいのは、「これらすべての画像に対してpngQuant圧縮を実行し、利用可能なすべてのスレッドを使用する」ということです。

ベストアンサー1

moreutilsparallelとGNUparallelの両方がこれを行います。 moreutilsと並行して次のようになります。

parallel -j "$(nproc)" pngquant [pngquant-options] -- *.png

nprocavailable-processors() pngQuants をすぐに実行するために使用可能なプロセッサ (スレッド) の数を-j "$(nproc)"各単一の PNG ファイルを渡して出力します。開始オーバーヘッドが高すぎる場合は、次の-nオプションを使用してPNGファイルを各実行に同時に渡すことができます。-n 22つのPNGが各pngQuantに渡されます。

おすすめ記事