我有一个在运行时读取少量条目并将其写入文件的代码。在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个条目。
答案 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