xen*_*ide 5 gnu parallelism gnu-parallel
我真正想做的是运行 X 个作业,并行运行 X 个数量以测试 API 竞争条件。
我想出了这个
echo {1..10} | xargs -n1 | parallel -m 'echo "{}"';
Run Code Online (Sandbox Code Playgroud)
哪个打印
7 8 9
10
4 5 6
1 2 3
Run Code Online (Sandbox Code Playgroud)
但我真正想看到的是(注意顺序实际上并不重要)。
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
并且这些将一次并行处理 4 个(或任何数量的 CPU/核心,我有,例如--jobs 4
)。总共 10 次单独执行。
我试过这个
echo {1..10} | xargs -n1 | parallel --semaphore --block 3 -m 'echo -n "{} ";
Run Code Online (Sandbox Code Playgroud)
但它似乎只打印一次。如果您的解决方案不需要 xargs ,这似乎是对默认记录分隔符是换行符的想法的一种破解,但我也无法获得像我想要的那样工作的空间。
10
是一个相当小的数字,但可以说它要大得多, 1000
echo {1..1000} | xargs -n1 | parallel -j1000
Run Code Online (Sandbox Code Playgroud)
印刷
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.
Run Code Online (Sandbox Code Playgroud)
我实际上并不想要 1000 个进程,我一次想要 4 个进程,每个进程应该处理 1 条记录,因此当我完成时它会执行 1000 次。
我一次想要 4 个进程,每个进程应该处理 1 个记录
parallel -j4 -k --no-notice 'echo "{}"' ::: {1..10}
Run Code Online (Sandbox Code Playgroud)
-j4
- 职位数量。并行运行多达 4 个作业
-k
- 保持输出顺序与输入顺序相同。通常,作业完成后将立即打印作业的输出
:::
- 参数
输出:
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)