我真正想做的是运行 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
答案2
seq 10 | parallel -j4 echo {}
或者如果你有 4 个核心:
seq 10 | parallel echo