Node.js中如何判断worker thread(工作线程)是否处于存活状态
Node.js判断工作线程(Worker Thread)是否存活的通用方法
内置方案(无需额外依赖)
Node.js的worker_threads模块自带原生属性和事件可以直接判断线程状态,无需引入第三方库:
- 状态属性直接查询:Worker实例的
exitedAfterDisconnect是布尔值属性,值为false时说明线程处于存活状态,值为true时说明线程已经终止(含正常退出、崩溃等所有终止场景) - 事件监听实时感知:如果需要第一时间拿到线程崩溃/退出的通知,可以直接监听Worker实例的两个原生事件:
error:线程运行过程中发生未捕获异常导致崩溃时触发exit:线程无论正常终止还是异常崩溃都会触发,传入的参数为退出码,正常退出时退出码为0,异常终止时退出码非0
示例代码:
const { Worker } = require('worker_threads'); // 初始化工作线程 const taskWorker = new Worker('./task-script.js'); // 监听线程崩溃 taskWorker.on('error', (err) => { console.error('工作线程发生崩溃,错误详情:', err); }); // 监听线程退出 taskWorker.on('exit', (code) => { if (code !== 0) { console.error('工作线程异常终止,退出码:', code); } console.log('工作线程已结束运行'); });
主动轮询判断封装
如果需要随时主动查询线程存活状态,可以直接封装一个通用判断函数:
/** * 判断工作线程是否存活 * @param {Worker} worker 工作线程实例 * @returns {boolean} 存活返回true,终止/崩溃返回false */ function isWorkerAlive(worker) { if (!worker) return false; return !worker.exitedAfterDisconnect; } // 调用示例 console.log(isWorkerAlive(taskWorker));
注意事项
exitedAfterDisconnect属性在Node.js v12.17.0、v14.0.0及以上版本为稳定特性,低于该版本的环境优先使用error和exit事件监听方案- 线程崩溃时会先触发
error事件,之后再触发exit事件,无需重复处理状态 - 如果工作线程主动调用
process.exit()退出,也会触发exit事件,退出码为0属于正常退出场景
内容的提问来源于stack exchange,提问作者Awaiz Pasha
相关产品推荐
相关产品推荐

