2014-02-11 4 views
1

Я пытаюсь запустить 10 экземпляров функции BASH одновременно с GNU ParallelГНУ параллель с вложенным для петель и кратных команд

загружает функциональный BASH плитки из изображения и сшивает их вместе - первые одиночные строки, то каждые column - в один файл изображения.

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 
} 

К сожалению, по-видимому, obviuous решения - первый из которых

export -f DOWNLOAD_PAGE 
parallel -j10 DOWNLOAD_PAGE 

не работают.

Есть ли способ сделать это с помощью 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