ruby: Как узнать количество запущенных подпроцессов (форков) - PullRequest
1 голос
/ 13 июля 2010

Я хочу ограничить количество подпроцессов до 3. Как только оно достигнет 3, я жду, пока один из процессов остановится, а затем выполню новый. Я использую Kernel.fork, чтобы начать процесс.

Как узнать количество запущенных подпроцессов? или есть лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 13 июля 2010

Хороший вопрос, но я не думаю, что такой метод есть в Ruby, по крайней мере, в стандартной библиотеке. Там много камней ...

Эта проблема звучит как работа для класса Mutex. Посмотрите раздел Условные переменные здесь , чтобы узнать, как использовать мьютексы Руби.

0 голосов
/ 13 июля 2010

Мое решение состояло в том, чтобы использовать trap ("CLD"), чтобы перехватывать SIGCLD всякий раз, когда дочерний процесс завершился, и уменьшить счетчик (глобальную переменную) запущенных процессов.

0 голосов
/ 13 июля 2010

У меня обычно есть Queue задач, которые нужно выполнить, а затем есть пара потоков, потребляющих задачи, пока они не получат элемент, указывающий на окончание работы.В "Программировании Ruby" есть пример под библиотекой Thread.(Я не уверен, стоит ли мне копировать и вставлять пример в переполнение стека - извините)

...