参考:
- https://wanago.io/2019/05/06/node-js-typescript-12-worker-threads/
由于 ts-node 和 nodemon 直接 使用 worker_threads 有问题。需要一个代理js
主流程 main.ts
import { Worker } from 'worker_threads';
console.log(`[Main] Run in ${process.env.NODE_ENV} env`);
// Instanciate worker
const myWorker: Worker = new Worker(process.env.NODE_ENV === 'production' ? './task.js' : './src/task_proxy.js');
// On worker online
myWorker.on('online', () => {
console.log(`[Main] Worker is online and executing code!`);
myWorker.postMessage('ss');
});
myWorker.on('message', () => {
console.log(`[Main] Worker is done!`);
});
// On worker exit
myWorker.on('exit', (code) => {
console.log(`[Main] Worker execution is over with code: ${code}`);
});
// On worker error
myWorker.on('error', (error) => {
// Sometime stack is undefined, we can stringify error instead
console.log(`[Main] Worker catch an error: ${error.stack || JSON.stringify(error)}`);
});
工作脚本 task.ts
import { parentPort } from 'worker_threads';
parentPort?.once('message', (message) => {
console.log('[Worker] running:', message);
parentPort?.postMessage({ pong: message });
});
代理脚本 task_proxy.js
const path = require('path');
require('ts-node').register();
require(path.resolve(__dirname, 'task.ts'));