linux - shell 脚本: Parallelizing commands in bash script under Ubuntu linux

标签 linux multithreading bash shell ubuntu

我正在创建一个 bash 脚本来无损压缩 jpeg 和 png 文件,因此我在 Ubuntu 下使用两个名为 jpegoptimoptipng 的包。 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/

相关文章:

linux - 如何在脚本中使用两个 CPAN 模块

linux - 使用 bash 脚本读取数字

c# - 如何使事件处理程序异步运行?

mysql - Bash:当服务器出现故障时关闭 MySQL 连接

linux - 从文件中的 VMSTAT 中提取 %CPU 使用率

linux - 无法连接到位于 unix :/var/run/docker. sock 的 Docker 守护程序。 docker 守护进程是否正在运行?

python - 如何在 Cython 中调用多线程 C 函数?

c++ - 在线程中创建 COM 对象

mysql - 尝试隔离每个主机的 pt-query-digest

bash - 在不使用 stderr 的情况下将 stdout 重定向到文件后写入终端?