使用 NodeJS 集群执行 Grunt 任务
Execute Grunt task using NodeJS cluster
我有一个 G运行t 任务,目前我正在使用 AsyncJS 运行 它。 AsyncJS 工作得很好,但我仍然觉得如果我可以利用 NodeJS 集群来 运行 它会更强大。我检查了 G运行t Parallel 和 G运行t Concurrent,这与我在 G运行t 任务中所做的没有太大区别。关于利用 NodeJS 集群模块加速任务执行的任何建议。
目前我是这样做的
var queue = async.queue(task, function(task, cb){
// Process task with PhantomJS and then
cb();
}, require('os').cpus().length);
async.each(htmlPages, function(val, cb) {
queue.push(val, function() {
cb();
});
}, function() {
console.log('Completed');
done();
});
如何使用 NodeJS 集群使其工作?
一种方法是使用 cluster
模块产生您想要的工人数量。然后在您想让他们开始处理某事时向他们发送消息。
下面是初始化 os.cpus().length
工作人员的代码和 queue
将工作发送给他们的代码。然后它将 htmlPages
中的所有内容推送到该队列,等待它完成,然后最终杀死所有工作人员。
var os = require('os');
var async = require('async');
var cluster = require('cluster');
if (cluster.isWorker) {
process.on('message', function(msg) {
// Do the Phantom JS stuff
process.send(theResult);
});
}
if (cluster.isMaster) {
var workers = os.cpus().map(function () {
return cluster.fork();
});
var queue = async.queue(function (msg, cb) {
var worker = workers.pop();
worker.once('message', function (msg) {
workers.push(worker);
cb(null, msg);
});
worker.send(msg);
}, workers.length);
async.each(htmlPages, queue.push.bind(queue), function (err) {
if (err) { throw err; }
workers.forEach(function (worker) {
worker.kill();
});
console.log('Completed');
});
}
我有一个 G运行t 任务,目前我正在使用 AsyncJS 运行 它。 AsyncJS 工作得很好,但我仍然觉得如果我可以利用 NodeJS 集群来 运行 它会更强大。我检查了 G运行t Parallel 和 G运行t Concurrent,这与我在 G运行t 任务中所做的没有太大区别。关于利用 NodeJS 集群模块加速任务执行的任何建议。
目前我是这样做的
var queue = async.queue(task, function(task, cb){
// Process task with PhantomJS and then
cb();
}, require('os').cpus().length);
async.each(htmlPages, function(val, cb) {
queue.push(val, function() {
cb();
});
}, function() {
console.log('Completed');
done();
});
如何使用 NodeJS 集群使其工作?
一种方法是使用 cluster
模块产生您想要的工人数量。然后在您想让他们开始处理某事时向他们发送消息。
下面是初始化 os.cpus().length
工作人员的代码和 queue
将工作发送给他们的代码。然后它将 htmlPages
中的所有内容推送到该队列,等待它完成,然后最终杀死所有工作人员。
var os = require('os');
var async = require('async');
var cluster = require('cluster');
if (cluster.isWorker) {
process.on('message', function(msg) {
// Do the Phantom JS stuff
process.send(theResult);
});
}
if (cluster.isMaster) {
var workers = os.cpus().map(function () {
return cluster.fork();
});
var queue = async.queue(function (msg, cb) {
var worker = workers.pop();
worker.once('message', function (msg) {
workers.push(worker);
cb(null, msg);
});
worker.send(msg);
}, workers.length);
async.each(htmlPages, queue.push.bind(queue), function (err) {
if (err) { throw err; }
workers.forEach(function (worker) {
worker.kill();
});
console.log('Completed');
});
}