开始研究nodejs中的worker_threads
工作完成后,最后一个工作人员必须完成脚本
process.exit();
我的index.js
const { Worker } = require("worker_threads");
const logUpdate = require("log-update");
const threads = 100;
const someData = 'some data';
let names = [...Array(threads)].fill(0);
for (let i = 0; i < threads; i++) {
const port = new Worker(require.resolve("./worker.js"), {
workerData: { someData, i }
});
port.on("message", (data) => handleMessage(data, i));
port.on("error", (e) => console.log(e));
port.on("exit", (code) => console.log(`Exit code: ${code}`));
}
function handleMessage(_, index) {
names[index]++;
logUpdate(names.map((status, i) => `Thread ${i}: ${status} ${_}`).join("\n"));
}
worker.js
const { parentPort, workerData } = require("worker_threads" )
const { someData, i } = workerData;
(async () => {
parentPort.postMessage( `worker start ${i} some data ${someData}`);
process.exit();
})();
现在可以创建工作人员并进行工作了,但是完成工作后,脚本无法完成工作
答案 0 :(得分:0)
据我所知,我知道如果在工作程序退出之前没有引起任何错误,则返回码为0,否则为1(自动)。看process exit codes。
因此,当您此时执行process.exit()
时,可以将代码作为参数传递。 (或完全没有process.exit()
)。
一般来说,我所看到的是:
将工作程序创建包装在Promise返回函数中。
注意:
parentPort.postMessage(JSON.stringify(true))
在我的工作线程中。因此,在主线程中是worker.on('message', message => {if (message === true) {worker.terminate();resolve(true);} else {console.log(message)}});
每当我不得不为重复的任务委托创建线程时。我在数组上使用.map函数。内部函数返回的返回值与我的工作程序创建者(承诺的返回)函数的返回值相同。因此,最终我将数组映射到Promise数组中。
结帐: