我如何加速我的for循环,该循环为列表中的每个条目生成一个jvm并关闭?

时间:2019-02-11 12:30:03

标签: bash

我有一个在运行时读取少量条目并将其写入文件的代码。在for循环中,我读取文件的内容,并且对于每一行,我都运行我的代码,此代码启动jvm并在处理完成后将其关闭。我已每5分钟安排一次作业,但由于jvm调用速度慢,该作业需要5分钟以上的时间。我想知道是否有任何方法可以并行执行此操作!

for i in `cat test.txt`
do
echo "test"
kafka-run-class kafka.admin.ConsumerGroupCommand ### This is my java process which takes time.
done

我的test.txt包含100个条目。

1 个答案:

答案 0 :(得分:2)

显而易见的方法是使用 GNU Parallel 。因此,如果您的文件test.txt如下所示:

line 1
line 2
line 3
line 4

您可以这样做:

parallel -k echo < test.txt
line 1
line 2
line 3
line 4

-k仅使输出保持顺序。

您也可以使用--dry-run来查看它会做什么而无需实际执行任何操作。

如果您想一次运行12个作业,也可以使用-j 12,因为正如我所写的那样,每个CPU内核只能并行运行一个作业。

TL; DR;

我建议您尝试以下方法:

parallel kafka-run-class kafka.admin.ConsumerGroupCommand < test.txt