2014-12-04 2 views
0

У меня есть файл с следующими пунктами:Как выполнить кучу команд из файла с контролем параллелизма?

echo 1 ; sleep 2 
echo 2 ; sleep 2 
echo 3 ; sleep 2 
echo 4 ; sleep 2 
echo 5 ; sleep 2 
echo 6 ; sleep 2 
echo 7 ; sleep 2 

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

+1

возможно дубликат [Запуск ограниченного числа дочерние процессы параллельно в bash?] (http://stackoverflow.com/questions/6593531/running-a-limited-number-of-child-processes-in-parallel-in-bash) –

ответ

2
$ cat file.txt 
echo 1 ; sleep 1 
echo 2 ; sleep 1 
echo 3 ; sleep 1 
echo 4 ; sleep 1 
... 
echo 13 ; sleep 1 
echo 14 ; sleep 1 

Запуск его с xargs распараллеливания:

xargs -a file.txt -I CMD --max-procs=2 sh -c CMD 

Это, кажется, производит некоторый вывод, но в основном последовательный, хотя один раз в то время, вы получите независимый вывод:

1 
3 
2 
4 
... 
13 
14 
  • -I опция заменяет каждую команду, считанную заменой, в этом случае CMD
  • sh -c CMD в основном говорит, что с каждой командой.
  • -c говорит ш, что команда будет поступать из строки команды

Возможно запустить его с помощью команд, которые требуют немного больше обработки покажет подсказку распараллеливания

+0

GNU 'parallel' будет альтернатива «xargs» и обеспечивает гораздо большую гибкость, несмотря на то, что она не настолько вездесуща ... – twalberg