【问题标题】:GNU parallel with nested for loops and multiple commandsGNU 与嵌套 for 循环和多个命令并行
【发布时间】:2014-02-12 07:31:25
【问题描述】:

我正在尝试使用 GNU Parallel 同时运行 10 个 BASH 函数实例

BASH 函数从图像下载图块并将它们拼接在一起 - 首先是单行,然后是每一列 - 到单个图像文件。

function DOWNLOAD_PAGE {
for PAGE in {0041..0100}
do
                for COLUMN in {0..1}
                        do
                                for ROW in {0..2}
                                do wget -O "$PAGE"_"$COLUMN"_"$ROW".jpg "http://www.webb$PAGE$COLUMN$ROW"
                        done
                convert "$PAGE"_"$COLUMN"_*.jpg -append "$PAGE"__"$COLUMN".jpg
                done
                convert "$PAGE"__*.jpg +append "$PAGE"_done.jpg
        done
}

不幸的是,显然是显而易见的解决方案 - 第一个是

export -f DOWNLOAD_PAGE
parallel -j10 DOWNLOAD_PAGE

不工作。

有没有办法使用 GNU Parallel 来做到这一点?

【问题讨论】:

    标签: parallel-processing gnu-parallel


    【解决方案1】:

    您的部分功能可以并行化,而其他部分则不能:例如您不能在下载之前附加图像。

    function DOWNLOAD_PAGE {
        export PAGE=$1
        for COLUMN in {0..1}
        do
            parallel wget -O "$PAGE"_"$COLUMN"_{}.jpg "http://www.webb$PAGE$COLUMN{}" ::: {0..2}
            convert "$PAGE"_"$COLUMN"_*.jpg -append "$PAGE"__"$COLUMN".jpg
        done
        convert "$PAGE"__*.jpg +append "$PAGE"_done.jpg
    }
    
    export -f DOWNLOAD_PAGE
    parallel -j10 DOWNLOAD_PAGE ::: {0041..0100}
    

    更并行化的版本(但更难阅读):

    function DOWNLOAD_PAGE {
        export PAGE=$1
        parallel -I // --arg-sep /// parallel wget -O "$PAGE"_//_{}.jpg "http://www.webb$PAGE//{}"\; convert "$PAGE"_"//"_\*.jpg -append "$PAGE"__"//".jpg ::: {0..2} /// {0..1}
        convert "$PAGE"__*.jpg +append "$PAGE"_done.jpg
    }
    
    export -f DOWNLOAD_PAGE
    parallel -j10 DOWNLOAD_PAGE ::: {0041..0100}
    

    您对 GNU Parallel 所做的事情的理解有些误导。考虑浏览教程http://www.gnu.org/software/parallel/parallel_tutorial.html,然后尝试了解示例的工作原理:n1_argument_appending">http://www.gnu.org/software/parallel/man.html#example__working_as_xargs_n1_argument_appending

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 2015-10-15
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多