Вот моя проблема. Я реализовал небольшой script, который выполняет некоторые тяжелые вычисления, как модуль node.js. Итак, если я набираю "node myModule.js", он вычисляет на секунду, а затем возвращает значение. Теперь я хочу использовать этот модуль из моей основной программы node.JS. Я мог бы просто поместить все вычисления в функцию "doSomeCalculation", а затем сделать:
var myModule = require("./myModule");
myModule.doSomeCalculation();
Но это будет блокировать, поэтому было бы плохо. Я бы хотел использовать его неблокирующим способом, например, например, вызовы DB. Поэтому я попытался использовать child_process.spawn и exec, например:
var spawn = require("child_process").spawn;
var ext = spawn("node ./myModule.js", function(err, stdout, stderr) { /* whatevs */ });
ext.on("exit", function() { console.log("calculation over!"); });
Но, конечно, это не сработает. Я попытался использовать EventEmitter в myModule, испустив события "calculateDone" и попытавшись добавить связанный прослушиватель в переменную "ext" в приведенном выше примере. Все еще не работает.
Что касается вилок, они не совсем то, что я пытаюсь сделать. Форкс потребует ввода кода, связанного с вычислением, в основную программу, форсинга, вычисления в дочернем элементе, в то время как родитель делает все, что он делает, а затем как я могу вернуть результат?
Итак, вот мой вопрос: могу ли я использовать дочерний процесс для выполнения неблокирующего вычисления, когда вычисление помещается в файл Node, или это просто невозможно? Должен ли я делать тяжелый расчет в Python script вместо этого? В обоих случаях, как передать аргументы дочернему процессу - например, изображение?