2013-03-21 30 views
5

我是一个刚刚开始修补它的node.js新手。我有一段代码执行一个处理所有cpu核心上的字符串的函数,并且我想确定哪个工作者首先用它的id完成函数,然后杀死每个工作者(或者仅仅是出口节点)。功能完成后杀死node.js工作人员

这里是我的程序的简化代码:

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) {} 

以外执行呢?所以问题是,经过一个工作者/进程完成该功能,节点等待,直到每个进程完成他们的工作,并且在这些之后不终止,每个进程保持空闲直到我按下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(); 
     } 
    } 
} 

但自从我问我这里,它显然是行不通的:)

回答

7

所以,你要杀死所有工人,当第一个工人完成工作?

... 
cluster.on('exit', function(worker, code, signal) { 
    console.log('worker ' + worker.process.pid + ' died'); 
    // kill the other workers. 
    for (var id in cluster.workers) { 
    cluster.workers[id].kill(); 
    } 
    // exit the master process 
    process.exit(0); 
}); 
... 
function computeString() { 
    // Code to compute... 
    if (done) { 
    process.exit(0); // exit the worker process cleanly, triggering the 'exit' event 
    } 
}; 
+1

我来说,我想杀死,并在条件为真由一个地重新启动工作之一,请透露这 – mithra 2016-01-27 07:02:34

+0

@mithra这取决于确切使用情况下,任何光线。也许创建一个新的问题,概括说明你试图完成的是什么。 – robertklep 2016-01-27 14:25:34