これが私の問題です。node.js モジュールとして、重い計算を行う小さなスクリプトを実装しました。したがって、「node myModule.js」と入力すると、1 秒間計算してから値が返されます。ここで、メインの 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!"); });
しかし、もちろん、うまくいきません。上記の例では、myModule で EventEmitter を使用して「calculationDone」イベントを発行し、関連するリスナーを「ext」変数に追加しようとしました。それでもうまくいきません。
フォークに関しては、私がやろうとしているものではありません。フォークでは、計算関連のコードをメイン プログラムに配置し、フォークし、子で計算し、親が何をしても、結果を返す必要があります。
では、私の質問は次のとおりです。計算が Node ファイルに入れられている場合、子プロセスを使用してノンブロッキング計算を実行できますか?それとも単に不可能ですか? 代わりに、Python スクリプトで重い計算を行う必要がありますか? どちらの場合も、子プロセスに引数を渡すにはどうすればよいですか?たとえば、画像ですか?