Призупинити всі, крім процесора інтенсивних завдань


0

У мене є близько 50 папок даних для обробки, і у мене є скрипт ruby, який обробляє файли папки (в якій папці він обробляється на основі файлу налаштувань .yml). І комп'ютер з чотирма процесорами в ньому.

Я хотів би мати можливість запустити 50 процесів, але тільки 4 з них активно працювати в будь-який час, і інші 46 призупинено. Як тільки один з процесів закінчиться, я б хотів, щоб один з призупинених процесів ставав непризупиненим, поки не буде завершено всі 50. \ t Таким чином, я можу це зробити

./super_script.rb > folder_1_log.txt
*edit config.yml*
./super_script.rb > folder_2_log.txt
*edit config.yml*
...

І зосередитися на чомусь іншому до завершення обробки.

Чи можна це зробити? Чи є деякі терміни для того, що я хочу, щоб я міг Google?

(Іншою альтернативою було б зробити супер_скрипт здатним до багатопоточності - можливо, я боюся, що не приймаю такого підходу)

(Операційна система Ubuntu Linux, і більшу частину процесорного часу не займає super_script.rb, а іншими програмами ruby, які вона викликає через систему ())


Чи не належить це питання до StackOverflow.com?
Peter Mortensen

@Peter Я б подумав навпаки. Які теги ви віддаєте йому в SO?
Andrew Grimm

Можливі теги (ОК, деякі з них зверху): bash-програмування bash-script ruby ​​мультипрограмування пакетної обробки крос-процесових комунікаційних розподілених обчислювальних кластерів
Peter Mortensen

Відповіді:


2

Ось a bash скрипт це виглядає так, ніби він робить щось близьке до того, що ви хочете зробити - він паралельно запускає ряд процесів, але переконується, що одночасно не буде більше n.

З іншого боку, якщо те, що ви робите, пов'язане з диску, а не пов'язане з процесором (я прошу, тому що ви стверджуєте, що у вас є "50 папок даних для обробки"), то вам може бути краще запускати всі ваші процеси послідовно, щоб уникнути конфлікту на диску між процесами.


Дякую. Я заснував свій сценарій gist.github.com/148221 на ньому
Andrew Grimm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.