Parallel processing GNU与嵌套for循环和多个命令并行

Parallel processing GNU与嵌套for循环和多个命令并行,parallel-processing,gnu-parallel,Parallel Processing,Gnu Parallel,我试图用GNU并行程序同时运行10个BASH函数实例 BASH函数从图像下载分片,然后将它们缝合在一起(先是单行,然后是每列)到单个图像文件中 function DOWNLOAD_PAGE { for PAGE in {0041..0100} do for COLUMN in {0..1} do for ROW in {0..2}

我试图用GNU并行程序同时运行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来实现这一点?

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

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}
更并行的版本(但更难阅读):

您对GNU Parallel的理解有些误导。考虑在教程中行走,然后尝试理解例子是如何工作的:N1- AguMuthEngApp>http://www.gnu.org/software/parallel/man.html#example__working_as_xargs_n1_argument_appending

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}