【问题标题】:How to use all cores with a for loop如何通过 for 循环使用所有内核
【发布时间】:2020-07-04 18:50:15
【问题描述】:

我有一个脚本可以处理目录中的每个文件。 djvu2pdf 的每次执行都需要大量时间,并且只使用我的四个 CPU 内核中的一个:

for i in  *.djvu; do djvu2pdf "$i"; done

为了加快整体处理速度,我想并行运行四个 djvu2pdf 进程。

如何更改我的脚本以获得四个管道而不是目前的一个管道?

【问题讨论】:

标签: bash parallel-processing


【解决方案1】:

也许分叉会为您解决问题?你可以将处理的主要部分包装成一个函数,例如像这样

topdf() {
    local djvu_file=$1
    djvu2pdf "$djvu_file"
}

for i in  *.djvu; do topdf "$i" & done

如您所见,有一个“&”字符表示操作应发送到后台。

【讨论】:

  • 请注意,如果您有 200 个任务,您将创建 200 个在 4 个内核上运行的进程。如果(比如说)您想要及时、增量地交付结果,这可能是个问题
【解决方案2】:

使用 GNU 并行

parallel djvu2pdf ::: *.djvu

默认情况下,它会为每个 CPU 内核运行一个作业,但您可以设置更多或更少的作业与 parallel -j N 并行,其中 N 是您想要的数字。

您还可以通过parallel --bar ...获得进度条

您还可以进行 “试运行”,看看它在不实际使用 parallel --dry-run ... 的情况下会做什么

See also here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多