我有一个脚本来处理目录中的每个文件。 djvu2pdf
的每次执行都花费大量时间,并且仅使用我的四个CPU内核之一:
for i in *.djvu; do djvu2pdf "$i"; done
为了加快总体处理速度,我想并行运行四个djvu2pdf
进程。
如何更改我的脚本,使我得到四个管道而不是现在的一个管道?
答案 0 :(得分:2)
也许分叉将为您解决问题?您可以将处理的主要部分包装到一个函数中,例如这样
topdf() {
local djvu_file=$1
djvu2pdf "$djvu_file"
}
for i in *.djvu; do topdf "$i" & done
如您所见,有一个“&”字符表示该操作应发送到后台。
答案 1 :(得分:1)
使用 GNU Parallel :
parallel djvu2pdf ::: *.djvu
默认情况下,它将为每个CPU内核运行一个作业,但是您可以与parallel -j N
并行设置更多或更少的作业,其中N
是您想要的编号。
您还可以使用parallel --bar ...
您还可以执行“空运行” 来查看在不实际使用parallel --dry-run ...