4

データ処理コマンドを 10,000 回実行するスクリプトがあります。

foreach f (folderName/input*.txt)
  mycmd $f
end

各「mycmd $f」の実行時間を 0.25 秒に設定しました。10,000 回実行すると、合計で 1 時間以上になります。16コアのnehalemで実行しています。残りの 15 コアで実行しないのは非常にもったいないことです。

試してみました & スリープ状態で、どういうわけか、スクリプトは約 3900 回の反復で警告またはエラーで終了します。以下を参照してください。睡眠が短いほど早く死ぬ。

foreach f (folderName/input*.txt)
  mycmd $f & ; sleep 0.1
end

もっと良い方法があるはずです。注: 私はシェル スクリプト ソリューションを好みます。C/C++ の世界に足を踏み入れるのはやめましょう。

ありがとう

よろしく

4

4 に答える 4

6

ファイルのリストをパイプして

xargs -n 1 -P 16 mycmd

例えば:

echo folderName/input*.txt | xargs -n 1 -P 16 mycmd
于 2012-06-02T00:42:13.853 に答える
1

次のアプリケーションのいずれかを使用して可能な他のいくつかのソリューションがあります。

xjobs

平行

PPSS-並列処理シェルスクリプト

runpar.sh

于 2012-06-02T07:17:33.260 に答える
0

GNU Parallelを使用すると、次のことができます。

parallel mycmd ::: folderName/input*.txt

差出人:http ://git.savannah.gnu.org/cgit/parallel.git/tree/README

=フルインストール=

GNU Parallelのフルインストールは、次のように簡単です。

./configure && make && make install

ルートでない場合は、パスに〜/ binを追加し、〜/ binおよび〜/shareにインストールできます。

./configure --prefix=$HOME && make && make install

または、システムに「make」がない場合は、src / parallel src / sem src / niceload src/sqlをパスのディレクトリにコピーするだけです。

=最小限のインストール=

並列が必要で、「make」がインストールされていない場合(システムが古いかMicrosoft Windowsである可能性があります):

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
mv parallel sem dir-in-your-$PATH/bin/

簡単な紹介については、紹介ビデオをご覧ください: https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

于 2013-03-12T15:33:12.860 に答える
0

batch;でジョブを送信します。これにより、負荷分散とリソース不足の問題が修正されます。

for f in folderName/input.*; do
    batch <<____HERE
        mycmd "$f"
____HERE
done

(引用符が正しいか、および/または有用であるかどうかは100%わかりません。)

于 2012-06-02T07:20:13.017 に答える