Русская Википедия:GNU parallel

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Infobox Software

GNU parallel является утилитой командной строки для ОС Linux и других Unix-подобных операционных систем, которая позволяет выполнять shell-скрипты параллельно. GNU parallel - это свободное программное обеспечение, написанное Оле Танге на языке Perl. Программа доступна в соответствии с условиями лицензии GPLv3.[1]

Использование

Файл:GNU Parallel script processing and execution - intro video Part 1.ogg
Вводное видео, Часть 1
Файл:GNU Parallel script processing and execution - intro video Part 2.ogg
Вводное видео, Часть 2

Чаще всего используется для замены циклов, например

    for x in `cat list` ; do 
            do_something "$x"
    done | process_output

на

    cat list | parallel do_something | process_output

где файл с именем list содержит аргументы для do_something и где process_output может быть пустым.

Скрипты использующие parallel часто легче читать, чем скрипты, использующие pexec.

Parallel включает также

  • группировка стандартного вывода и стандартного потока ошибок, поэтому вывод параллельно запущенных задач не работает вместе;
  • сохраняет порядок вывода, оставляя тот же самый порядок как на вводе;
  • приятно иметь дело с именами файлов, содержащих специальные символы, такие как пробел, одиночная кавычка, кавычки, амперсанд и кодировку UTF-8;

По умолчанию, параллельно запускается столько же задач, сколько и ядер процессора.

Примеры

 find . -name "*.foo" | parallel grep bar

Эквивалентно:

 find . -name "*.foo" -exec grep bar {} +

Это поиск во всех файлах в текущем каталоге и его подкаталогах, чье имя заканчивается на .foo и содержит строку bar. Parallel будет работать не так, как ожидается, если имя файла содержит символ новой строки. Для того чтобы избежать этого ограничения можно использовать:

 find . -name "*.foo" -print0 | parallel -0 grep bar

Команда выше использует нулевой символ для разделения имен файлов.

 find . -name "*.foo" | parallel -X mv {} /tmp/trash

Эта команда использует {} , чтобы сказать parallel , что нужно заменить {} списком аргументов.

 find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media

Приведенная выше команда делает то же, что:

 cp -v -p *.ogg /home/media

однако первая команда, которая использует find/parallel/cp является более эффективной в использовании ресурсов и не остановится с ошибкой, если раскрытие *.ogg будет слишком большим для shell.

См. также

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Изолированная статья