Gnu
如何在每個作業的記錄中並行執行 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 次。
我一次要 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