各ジョブレコードでGNUを並列実行する方法、コアごとに1つのプロセス

各ジョブレコードでGNUを並列実行する方法、コアごとに1つのプロセス

私が本当に望むのは、X個のジョブを実行し、X個のジョブを並列に実行してAPI競合条件をテストすることです。

私はこれを思い出しました。

echo {1..10} | xargs -n1 | parallel -m 'echo "{}"';

印刷

7 8 9
10
4 5 6
1 2 3

しかし、私が本当に見たいのです(ノート順番は大きく関係ありません。)

1
2
3
4
5
6
7
8
9
10

これは一度に4つ(または私が持っているCPU /コアの数に関係なく)を並列に処理します--jobs 4。合計10回の個別実行。

私はこれを試しました

echo {1..10} | xargs -n1 | parallel --semaphore --block 3  -m 'echo -n "{} ";

しかし、一度だけ印刷されるようです。解決策にxargsが必要ない場合、これはデフォルトのレコード区切り文字が改行であるというアイデアをハックしているように見えますが、必要に応じて機能するスペースも取得できません。

10かなり小さい数字ですが、はるかに大きいと言えます。1000

echo {1..1000} | xargs -n1 | parallel -j1000

印刷

parallel: Warning: Only enough file handles to run 60 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 60 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.

私は実際には1000のプロセスを必要とせずに一度に4つのプロセスが必要で、各プロセスは1つのレコードを処理する必要があるため、完了すると1000回実行されます。

ベストアンサー1

一度に4つのプロセスが必要で、各プロセスは1つのレコードを処理する必要があります。

parallel -j4 -k --no-notice 'echo "{}"' ::: {1..10}
  • -j4- ポジション数。最大4つのジョブを同時に実行

  • -k- 出力順序は入力順序と同じにしてください。通常、ジョブ出力はジョブが完了するとすぐに印刷されます。

  • :::- 議論


出力:

1
2
3
4
5
6
7
8
9
10

おすすめ記事