Итак, у меня есть ситуация, когда я выполняю многочисленные команды с параллельным подключением вывода к другому сценарию, который потребляет результат. Проблема, с которой я сталкиваюсь, заключается в том, что мой скрипт, выполняющий обработку вывода, должен знать, когда какая-то конкретная команда закончила выполнение.GNU Parallel - обнаружение завершения параллельной команды
Я использую опцию --tag
, чтобы я знал, какая команда сгенерировала вывод, но в настоящее время мне нужно подождать, пока параллельная работа будет выполняться всеми командами, прежде чем я смогу узнать, что я больше не собираюсь выводить данные из определенного команда. По моему пониманию параллели я вижу следующие возможные решения, но мне никто не подходит.
Я мог бы сгруппировать выходные линии с
--line-buffer
вариант так выглядит, что пробежались последовательно. Затем всякий раз, когда я вижу вывод из следующей команды, я знаю, что предыдущий закончен, однако делает это таким образом, замедляет меня, так как одна команда может занять 30 секунд до , тогда как после нее может быть еще 20 команд, которые принимали только секунд и я хочу обработать их как можно ближе к реальному времени, так как возможно .Я мог бы обернуть свою команду в крошечном сценарии bash, который выводит «Процесс с некоторым ID DONE», чтобы получить уведомление о завершении команды. I не очень нравится, потому что я выполняю несколько сотен команд за раз, и на самом деле не хочу добавлять все эти дополнительные bash процессов.
Я действительно надеюсь, что я просто что-то упустил в документах, и там есть флаг, чтобы делать то, что я ищу.
Мое понимание заключается в том, что параллель реализована в perl, с которой мне комфортно, но скорее не придется добавлять функциональность самостоятельно, если она не будет полностью необходимой.
Любая помощь или предложения приветствуются.
Может быть, вы могли бы попробовать 'stdbuf -O0 параллельно ...' (или аналогичный), чтобы отключить буферизацию строки, 'parallel' делает? – bishop