首页 > 解决方案 > 这两种 bash 并行化语法有什么区别?

问题描述

下面的值“4”是 CPU 线程数。想法是以 4 个批次运行任务,并等到当前批次完成后再开始下一个批次。

语法 1:

while read something; do
((++i%4==0)) && wait
(
 task using something as input;
)
done < input_file.txt

语法 2:

while read something; do
((i=i%4)); ((i++==0)) && wait
(
 task using something as input;
)
done < input_file.txt

对我来说,它们的工作方式相同,只是第二个更长。但是在云中运行时(AWS ubuntu 14.04),只有语法 1 有效。syntax2 在 "((i=i%4));" 处引发了一般语法错误 一步,它变成了一个谜。

标签: bash

解决方案


“第二个更长”没有帮助,因为您使用了伪代码。

也许这会有所帮助:

while read x; do ((i=++i%4)) || wait; sleep $x & done < input_file.txt

我的input_file.txt

10
9
8
7
6
5
4
3
2
1

推荐阅读