【问题标题】:How do I make each worker use the first element of an list in Node.JS?如何让每个工作人员使用 Node.JS 中列表的第一个元素?
【发布时间】:2021-05-06 12:03:27
【问题描述】:

我正在使用集群(节点 js),我希望每个工作人员使用数组的第一个元素,我想使用这种方法,因为我不想使用 for 循环

Multi_processing = (() => {
  let name;
  x = [1,2,3,4]
  return async() => {
    
    if (cluster.isMaster) {
      
      // name = await prompt(' input ');// input which I want to be reused in else 
      console.log(`Master ${process.pid} is running`);
      for (let i = 0; i <2; i++) {
        cluster.fork();
        
      }
      cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} finished`);
      });
    } else {
      console.log(x.shift()) // name is undefined
      console.log(`Worker ${process.pid} started`);
      console.log(x)
    }
  };
})();

Multi_processing();

所以我这样做了,所以第一个开始使用第一个元素的工人然后删除它等等。

【问题讨论】:

    标签: javascript node.js arrays list multiprocessing


    【解决方案1】:

    您正在使用单独的内存创建单独的进程。该数组被复制到每个进程中。实现您想要的最简单的方法是将值传递给每个进程:

    const cluster = require('cluster');
    
    Multi_processing = (() => {
        return async () => {
    
            if (cluster.isMaster) {
                x = [1, 2, 3, 4];
                console.log(`Master ${process.pid} is running`);
                for (let i = 0; i < 2; i++) {
                    cluster.fork({ x: x[i] });
    
                }
                cluster.on('exit', (worker, code, signal) => {
                    console.log(`worker ${worker.process.pid} finished`);
                });
            } else {
                console.log(`Worker ${process.pid} started`);
                console.log(process.env.x);
            }
        };
    })();
    
    Multi_processing();
    

    另一种方式是实现进程间通信(IPC),让worker和master进行通信。 Here 你可以在 Node.js 中找到更多关于 IPC 的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2013-05-24
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多