LINUX.ORG.RU

GNU Parallel 20180922 ('Danske')

 , , , ,


0

1

GNU Parallel — это инструмент командной оболочки для выполнения задач параллельно на одном или нескольких компьютерах. Задача может быть одной командой или небольшим скриптом, который должен выполниться для каждой строки ввода. Примеры такого ввода — списки файлов, хостов, пользователей, ссылок или таблиц. Задачей также может быть команда, читающая из пайпа. GNU Parallel может разделять ввод и перенаправлять его выполняющимся параллельно командам.

Если Вы уже пользуетесь xargs и tee — использовать GNU Parallel будет очень просто, так как он совместим с аргументами xargs. Если Вы пишете циклы в командной оболочке, то обнаружите, что GNU Parallel может заменить большинство циклов и ускорить их за счёт распараллеливания. GNU Parallel может заменять даже вложенные циклы.

GNU Parallel гарантирует, что вывод команд получается таким же, каким был бы при последовательном запуске. Это позволяет использовать вывод GNU Parallel в качестве ввода для других программ.

Новое в этом выпуске:

>>> Получите книжку GNU Parallel 2018

>>> Источник

Ответ на: комментарий от WitcherGeralt

Ну вот прямо текущий кейс.

Есть монорепа (https://github.com/helm/charts), из которой я git subtree-ом выдираю отдельные части и впиливаю в свою репу с проектом. git subtree split — это долго. А если оно выполняется десять раз — это ещё дольше. Всё это действие IO-bound, поэтому GNU parallel неплохо заходит. Мелочь, на самом деле, но удобно.

Вот: http://ix.io/1nPr/bash

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

Я, конечно, могу специально придумать как это поюзать, но кто, как и зачем это юзает в действительности?

Постоянно юзаю для целой кучи юзкейсов. Собственно абсолютно всё, что написано однопоточным, и при этом надо применить к куче входных данных (или файлов).

Например из часто используемого:

# Пережать все флаки в текущем каталоге с -8
ls *.flac | parallel "flac -8 {} -o __{}" && rename __ '' __*

# Оптимизировать все png в текущем каталоге
ls *.png | parallel optipng -o7 -zm6-9 -strip all

anonymous ()
Ответ на: комментарий от WitcherGeralt

Я юзаю, когда надо определённое число http запросов отправить. Да что угодно удобно параллельить, если надо в n потоков.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от anonymous

ls *.flac

ls *.png

Не делай так, это некорректно.

# Пережать все флаки в текущем каталоге с -8
parallel "flac -8 {} -o __{}" && rename __ '' __* ::: *.flac

# Оптимизировать все png в текущем каталоге
parallel optipng -o7 -zm6-9 -strip all ::: *.png
intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)