Назад | Перейти на главную страницу

Отслеживание прогресса с помощью xargs

Я использую xargs для выполнения команды для набора входных параметров примерно так:

cat <someinput> | xargs -n 1 -P 5 <somecmd>

Входной файл очень длинный и долго запускается. Так что я просто жду появления командной строки. Есть ли способ отобразить индикатор выполнения для числа завершенных входных аргументов?

Я пробовал использовать «бар», но всегда получал «бесконечную» пропускную способность. Похоже, что xargs читает весь ввод перед выполнением команд.

Если у вас есть GNU Parallel, вы можете запустить:

cat <someinput> | parallel --bar -P 5 <somecmd>

GNU Parallel - это общий распараллеливатель, который упрощает параллельное выполнение заданий на одной или нескольких машинах, к которым у вас есть доступ по ssh.

Если у вас есть 32 разных задания, которые вы хотите запустить на 4 ЦП, простой способ распараллеливания - запустить 8 заданий на каждом ЦП:

GNU Parallel вместо этого порождает новый процесс, когда один из них завершается, сохраняя активными процессоры и тем самым экономя время:

Монтаж

Персональная установка не требует root-доступа. Это можно сделать за 10 секунд следующим образом:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

О других вариантах установки см. http://git.savannah.gnu.org/cgit/parallel.git/tree/README

Выучить больше

Смотрите другие примеры: http://www.gnu.org/software/parallel/man.html

Посмотрите вступительные видеоролики: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Пройдите по учебнику: http://www.gnu.org/software/parallel/parallel_tutorial.html

Подпишитесь на рассылку, чтобы получить поддержку: https://lists.gnu.org/mailman/listinfo/parallel

Вы можете использовать pv:

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

С этим вы узнаете, где чтение некоторая импликация есть, так что вы будете примерно знать, где лечение некоторая импликация является.

Если вы ищете только общую индикацию прогресса, самый простой способ - просто повторить эхо перед выполнением команды, которую вы хотите выполнить.

Пример: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{} наборы {} к текущей обрабатываемой строке

sh -c позволит вам выполнять несколько команд (примечание: точка с запятой после каждой команды требуется включая последний.