【问题标题】:Prevent multiple console logging output while clustering集群时防止多个控制台日志输出
【发布时间】:2015-09-01 21:57:43
【问题描述】:

我正在为nodejs 使用cluster 模块。

我是这样设置的:

var cluster = require('cluster');
if (cluster.isMaster) {
  var numCPUs = require('os').cpus().length;
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
}else{
     console.log("Turkey Test");
}

现在,我在我的 PC 上分叉了 6 个线程(6 个内核)。因此,当调试我的应用程序并从控制台读取数据时,会出现:

不管有多少集群正在运行,有没有办法让console.log 只输出一次?

【问题讨论】:

    标签: node.js cluster-computing v8


    【解决方案1】:

    您可以利用您可以与工作人员进行通信的事实,并发送一条消息告诉每个工作人员是否应该记录。你会发送它,以便只有一个工作人员(例如第一个工作人员)应该记录:

    var cluster = require('cluster');
    if (cluster.isMaster) {
      var numCPUs = require('os').cpus().length;
      for (var i = 0; i < numCPUs; i++) {
        cluster.fork().send({doLog: i == 0});
      }
    }else{
      process.on('message', function(msg) {
        if(msg.doLog) {
          console.log('Turkey Test');
        }
      });
    }
    

    【讨论】:

    • 从来没有想过这个,也从来没有见过{key: i ==0} 在这个例子中用作内联(if 语句)?这是什么诡计!
    • i == 0 只是一个表达式......它的计算结果是一个布尔值(真/假),它成为对象中属性的值......
    • 哈,这很酷@Amit。我从来没有见过像文字符号那样的内联表达式(不是你的错,我的错)就是这样。谢谢~
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多