我正在尝试与GNU Parallel同时运行BASH函数的10个实例
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}
更加并行化的版本(但更难阅读):
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句