単一システムで複数のシングルコアジョブのキューに似た動作がありますか? [コピー]

単一システムで複数のシングルコアジョブのキューに似た動作がありますか? [コピー]

私は24のコアを持つ古いMacを持っており、何百/何千ものシングルコアの作業を自動化したいと思います。バックグラウンドでプロセスを実行するbashスクリプトを作成しましたが、同時に多くのプロセスを設定すると、コンピュータがフリーズします(明らかに300台は大丈夫で、400台は多すぎます...)。

理想的に私がやりたいことは24日を実行し、1つが完了したら25日を実行し、次のタスクが完了したら26日を実行することです。残念ながら、各ジョブには異なる可変ランタイムが必要な場合があるため、時間差を付けて実行するタイミングを設定することはできません。

「wait」を含む項目を見たことがありますが、24を送信してからwaitコマンドで976を送信する場合は、目的の動作が提供されるのか、それとも最初のコマンドの後に表示されるのかわかりません。 Run 976 24 続行完了?

編集:ありがとう。重複する可能性が高いですが、質問に対する回答は並列性を指すだけなので、ここでxargsを使用してこれを行う方法を探索することはできますか?

その理由は、問題のMacが現在別の大陸にあり、今後数日以内にこれらすべてのタスクを実行するにはMacが必須であるためです。何かをインストールしながらコンピュータを台無しにする可能性が常にあるので、そうしません。今すぐ実行するために並列にインストールしたくないし、実際にインストールすることはできません。しかし、bashにはxargsがあるので、それを使ってナビゲートしています。

これまで、xargsと並列処理を満たすためにbashスクリプトを書き換えて、さまざまな入力で実行できます。今私が持っているのは、フォルダ内のすべてのファイルに対してタスクを実行するbashスクリプトです。私が現在試したこと:

ls -d myfolder/* | ls -d myfolder/* | xargs -P 2 -L 1 ~/bin/myscript.sh

しかし、私はまだ同時に実行されているようで、私が間違っているかどうかはわかりません。 (ここでは最大2つを使用しているので、ずっと調べてテストできます!フォルダに4つだけ入れました。誤って何百もの送信したくありません。)

最終編集:ああ! ! !私が何を間違えたのかを知ったのは、しばらくしてからのことでした。 xargsはおそらく私の実行中です。スクリプト並列ですが、実行するスクリプトを書いたプログラムではありません。パラメーター=値のペアが必要なパラメーターのリストにファイル名を挿入する方法がわからないため、スクリプトを作成しました。最後に、xargsで-Iフラグを使用してこれを行う方法を見つけました。これがついに効果がありました:

ls -d myfolder/* | xargs -I foo -P 2 -L 1 myprogram arg1 arg2 arg3=foo arg4

(私の考えには-Iと-L 1が重複していますが動作しますので触れません...)

ここで、myprogramのパラメータリストのfooは各ファイル名に置き換えられます。見つけるのに長い時間がかかる理由の1つは、-Iを含むほとんどのディレクティブが{}を置き換える要素として使用することです。だから私はそれを動作させることができませんでしたが、fooではうまく動作すると思いました。

答え1

利用可能なツールはいくつかありますが、私の考えではGNU Parallelが最適です。柔軟性と実用性の点で、xargsよりはるかに優れています。リンクMacOS の GNU 並列性の説明です。私はこれがあなたが探しているキューに最適なソリューションだと思います。

並列処理の使用に関する詳細は、ここ

答え2

最近同様の問題が発生しました。私が知っている限り、2つのオプションがあります。

xargs -0 -P 24 -L 1

そして

Gnu パラレル


たとえば、findコマンドで見つかったすべてのflacファイルをoggに変換するには、次のようにします。

 find -name "*.flac" -print0 | xargs -0 -P 24 -L 1 oggenc

コマンドラインを使用して-P 24一度に複数のプロセスを実行します。この内容を使用して、ニーズに合わせてカスタマイズできると確信しています。しかし、あなたの質問の詳細が必要です。-L 1find

関連情報