我正在创建一个bash脚本以无损地压缩jpeg和png文件,因此我在Ubuntu下使用了两个名为jpegoptim和optipng的软件包。 A将将该脚本与 2或4个核心处理器一起使用。我想使用我的CPU的全部容量。
问题在于,默认情况下optipng不支持多线程(它仅使用一个CPU内核),因此我决定启动 2或4个并行进程以更快地压缩图像。我已经将图像文件排序为4个几乎相等的数组(基于像素数),现在我需要并行运行这些进程。
我正在尝试在命令末尾用&
字符并行化进程,但是它不能并行执行工作。
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_1[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_2[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_3[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_4[@]} &)
我必须捕获命令的输出,所以我认为问题出在$()结构上。
最佳答案
看看Gnu parallel。它仅需对现有脚本进行少量修改就可以完成您想做的事情。
关于linux - Shell脚本: Parallelizing commands in bash script under Ubuntu linux,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15567122/