私はnode.jsの初心者で、いじり始めたばかりです。すべてのCPUコアで文字列を処理する関数を実行するコードがあり、どのワーカーが最初にそのIDで関数を完了し、その後すべてのワーカーを強制終了するか(またはノードを終了するか)を判断したいと思います。
これが私のプログラムの簡略化されたコードです:
var cluster = require('cluster'),
cpus = require("os").cpus().length, // 4 cores
myArray = ["foo","bar","baz","qux"]; // 1 string per core
if (cluster.isMaster) {
for (var i = 0; i < cpus; i++) {
var worker = cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else if (cluster.isWorker) {
computeString(myArray[cluster.worker.id]);
}
function computeString() {
// Code to compute...
}
このコードは機能し、computeString()関数は外部で実行するよりもはるかに高速に終了します。
else if (cluster.isWorker) {}
したがって、問題は、1つのワーカー/プロセスが関数を完了した後、ノードはすべてのプロセスがジョブを完了するまで待機し、その後も終了せず、ctrl+cを押すまですべてのプロセスがアイドル状態のままになることです。
私のアプローチは次のとおりです。
function computeString() {
// Code to compute...
if (done) {
console.log("Worker #" + cluster.worker + " completed the task!");
for (var id in cluster.workers) {
cluster.workers[id].kill();
}
}
}
しかし、私はここで尋ねているので、それは明らかに機能しません:)