Gnu

如何在每個作業的記錄中並行執行 GNU,每個核心有 1 個程序

  • October 28, 2017

我真正想做的是執行 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 次。

我一次要 4 個程序,每個程序應該處理 1 條記錄

parallel -j4 -k --no-notice 'echo "{}"' ::: {1..10}
  • -j4- 職位數量。並行執行多達 4 個作業
  • -k- 保持輸出順序與輸入順序相同。通常,作業完成後將立即列印作業的輸出
  • :::- 論據

輸出:

1
2
3
4
5
6
7
8
9
10
seq 10 | parallel -j4 echo {}

或者,如果您有 4 個核心:

seq 10 | parallel echo

引用自:https://unix.stackexchange.com/questions/400958