【问题标题】:Main file is run multiple times from worker processes in Node.js主文件从 Node.js 中的工作进程运行多次
【发布时间】:2018-03-18 21:52:21
【问题描述】:

我正在使用 cluster.fork() 在 Node.js 中生成工作进程。当我突然开始收到与我用来启动我的应用程序多次运行的 main.js 文件相关的奇怪错误时,我的应用程序正在运行。这是我的文件:

children.js

const cluster = require('cluster');
if (cluster.isMaster) {
    console.log('starting master')
    const spawnWorker = function () {
        let worker = cluster.fork();
        return worker
    }

    exports.spawn = function (cnt) {
        for (let i = 0; i < cnt; i++) {
            console.log('spawning worker.....')
            spawnWorker()
            console.log('worker spawned')
        }
    }
}
else {
    console.log('Worker activity')
}

main.js

console.log('Main called')
global.Children = require('./children');
Children.spawn(4)
console.log('Main Finished')

运行节点 main.js 的输出

Main called
starting master
spawning worker.....
worker spawned
spawning worker.....
worker spawned
spawning worker.....
worker spawned
spawning worker.....
Main called
Worker activity

在这之后我得到一个类型错误,Children.spawn 不是一个函数,它说 Main Finished。

我的问题是,为什么我的 main.js 会被第二次调用?我只希望它创建工作进程,然后在打印“Main Finished”后监听事件并“停止”执行。感谢您的帮助!

【问题讨论】:

  • "Main called" 打印了 3 次,对吗?

标签: javascript node.js child-process


【解决方案1】:

这是预期的行为,分叉的是整个过程,而不仅仅是您调用 cluster.fork() 的模块。工人从流程的开始开始执行;)

您的集群模块应该是您的主要入口点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 2015-02-03
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2014-07-04
    相关资源
    最近更新 更多