Узел child_process exec () завершает работу системы - PullRequest
0 голосов
/ 05 июля 2019

У меня есть большая папка с файлами, через которую я прохожу и запускаю команду оболочки bash (это связано с анализом аудио).Каждая из этих команд занимает много времени, и процессор моей виртуальной машины быстро достигает 100% нагрузки, и он выходит из строя.Есть ли способ управления порождением child_process ', чтобы он защищал ОС от сбоев?Может быть, как ограниченный пул процессов, запущенных в данное время, или что-то в этом роде ... Я надеюсь, что у кого-то есть опыт с этим, поскольку я ничего не нашел, когда гуглю проблему: D

Надеюсь, этот вопрос не слишком экзотический:) Ура!

1 Ответ

1 голос
/ 05 июля 2019

Есть ли способ управления порождением child_process ', чтобы он защищал ОС от сбоев?

Да, есть. Вам следует либо использовать какую-то заранее подготовленную систему очередей или систему управления заданиями, где вы предварительно настраиваете, сколько процессов вы хотите работать с этими различными заданиями одновременно, или вы создаете свое собственное.

Как и во всех вопросах здесь, посвященных stackoverflow, вы получите ответ, который будет гораздо более конкретным для вашей конкретной ситуации, если вы включите свой реальный код, который у вас есть сейчас. Но общая концепция заключается в том, что вы создаете рабочую очередь. Вы сами решаете, сколько процессов вы хотите работать одновременно. Когда вы добавляете что-то в очередь, вы проверяете, сколько процессов уже запущено. Если макс уже запущен, то вы просто добавляете задачу в очередь.

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

Дочерние процессы могут либо запускаться до завершения, либо останавливаться для каждого задания, начиная новый для каждого нового элемента, находящегося в очереди, или вы можете попросить их сообщить о завершении, но не завершиться, и вы можете отправить им новый рабочий элемент.

Существует множество пакетов управления заданиями или управления работниками, подобных этому, в npm, или вы можете просто создать свой собственный. Я бы лично взял уже написанную библиотеку, но пригодность для задачи каждой существующей библиотеки зависит от ваших конкретных деталей реализации, которыми вы не поделились.

...