GNU-параллель
![]() | |
Разработчик(и) | Проект GNU |
---|---|
Стабильная версия | 20230522 [ 1 ]
/ 22 мая 2023 г |
Репозиторий | |
Написано в | Перл |
Операционная система | ГНУ |
Тип | Утилита |
Лицензия | лицензия GPLv3 |
Веб-сайт | www ![]() |
GNU Parallel — это утилита командной строки для Linux и других Unix-подобных операционных систем, которая позволяет пользователю оболочки выполнять сценарии параллельно или команды . GNU Parallel — свободное программное обеспечение , написанное Оле Танге на Perl . Он доступен на условиях GPLv3 . [ 2 ]
Использование
[ редактировать ]Чаще всего используется для замены цикла оболочки, например
while read x; do
do_something "$x"
done < list
в форму
cat list | parallel do_something
где файл list
содержит аргументы в пользу do_something
и где process_output
может быть пустым.
Сценарии, использующие параллельный код, часто легче читать, чем сценарии, использующие pexec .
Параллельные функции программы также
- группировка стандартного вывода и стандартных ошибок , чтобы выходные данные параллельно выполняемых заданий не выполнялись вместе;
- сохранение порядка вывода, чтобы он оставался тем же порядком, что и ввод;
- хорошая работа с именами файлов, содержащими специальные символы, такие как пробел, одинарная кавычка, двойная кавычка, амперсанд и символы в кодировке 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
Приведенная выше команда расширяет {}
с таким количеством аргументов, насколько позволяет длина командной строки, при необходимости распределяя их равномерно между параллельными заданиями. Это может снизить накладные расходы на процесс для кратковременных команд, выполнение которых занимает меньше времени, чем запуск.
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 слишком велико для оболочки.

См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Танге, Оле (22 мая 2023 г.). «GNU Parallel 20230522 («Чарльз») выпущен [стабильный]» . параллель (список рассылки).
- ^ «ГНУ Параллель» . GNU.org .