【发布时间】:2021-08-06 09:09:07
【问题描述】:
我的工作代码有问题,目前我有一些代码可以扫描两个数据库表并找到一些匹配项,然后将一些数据从一个表添加到另一个创建一个新表。这是一大组数据,所以我正在使用工作线程来加快速度。
这一切都很好,但是一旦工作线程完成,就没有其他代码运行了也不跑。甚至parentResolve 也确实发生了,因为我没有看到console.log("parentResolve") 消息。
如果有人可以帮助我,我将不胜感激。
const calculateFactorialwithWorker = async () => {
const SCCM = await ProgramDev.find({ "program name": { $not: { $regex: ".*[(]KB*[)]*" } } }).limit(8000)
const sccmLength = SCCM.length
mongoose.connection.close()
return new Promise(async (parentResolve, parentReject) => {
const numbers = [...new Array(sccmLength)].map((_, i) => i);
const segmentSize = Math.ceil(sccmLength / userCPUCount);
const segments = [];
for (let segmentIndex = 0; segmentIndex < userCPUCount; segmentIndex++) {
const start = segmentIndex * segmentSize;
const end = start + segmentSize;
const segment = numbers.slice(start, end)
segments.push(segment);
}
try {
const results = await Promise.all(
segments.map(
segment =>
new Promise((resolve, reject) => {
const worker = new Worker(workerPath, {
workerData: segment,
});
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
})
));
parentResolve(() => {
console.log("parentResolve")
})
} catch (e) {
parentReject(e)
}
});
};
calculateFactorialwithWorker().then(() => {
console.log("Finished building merge table")
LogData
})
【问题讨论】:
标签: node.js multithreading promise node-worker-threads