Запустите команду bash параллельно с xargs - PullRequest
2 голосов
/ 11 декабря 2011

Я надеюсь, что кто-то может помочь мне с этой простой проблемой. Я хочу запустить эту команду параллельно

windmill chrome test=./test http://www.google.ch

Я играл с xargs и смотрел примеры в интернете. Однако я не смог создать команду xargs для параллельного выполнения упомянутой команды.

Я попробовал следующее

echo "chrome test=./test http://www.google.ch" | xargs -n 1 -P 2 windmill

, который не выполнил правильную команду, означая, что ветряная мельница, должно быть, выполнила неправильную команду, потому что вывод неправильный (вывод по умолчанию ветряной мельницы для указания неправильных аргументов).

Тем не менее, я получил еще одну проблему, а именно, что терминал / python жаловался на «socket.error: [Errno 48] Адрес уже используется».

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

Если xargs не является решением, я очень признателен, если вы сможете точно указать мне, как это сделать:)

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

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

Однако вы можете выполнить несколько команд параллельно.Допустим, вы хотите запустить их параллельно:

windmill chrome test=./test http://www.google.ch
windmill chrome test=./test http://www.google.se
windmill chrome test=./test http://www.google.no
windmill chrome test=./test http://www.google.de

Используя GNU Parallel, вы можете сделать:

parallel windmill chrome test=./test http://www.google.{} ::: ch se no de

Смотреть видео вступления, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1 и ходитьчерез учебник (man parallel_tutorial).Вы командуете с любовью за это.

Если это не то, что вы хотите, пожалуйста, перефразируйте ваш вопрос.

1 голос
/ 11 декабря 2011

xargs не будет запускать ваши команды параллельно.

Почему бы вам просто не выполнить это в любой bourne-совместимой оболочке?

for i in 1 2; do windmill chrome test=./test http://www.google.ch & done
0 голосов
/ 12 декабря 2011

Я обнаружил, что иногда у программы возникает проблема с привязкой к недавно выпущенному сокету - ядро ​​пытается предотвратить это по соображениям безопасности. Если вам нужно иметь возможность немедленно выполнить повторную привязку, вам, вероятно, следует попробовать SO_REUSEADDR или просто привязывать к другому порту каждый раз.

...