使用NodeJS群集执行Grunt任务

我有一个Grunt任务,目前我正在使用AsyncJS来运行它。 AsyncJS运行良好,但是如果我可以利用NodeJS集群来运行,我觉得它可以更强大。 我已经检出了Grunt Parallel和Grunt Concurrent,并且和我在Grunt任务中做的事情没什么两样。 任何关于利用NodeJS集群模块加快任务执行的build议。

目前我正在这样做

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'); }); }