我编写的脚本有一个问题,该脚本用于比较两个非常长的列表,我正在使用节点工作线程来加快速度,问题是我无法让工作人员正确完成。
这是我的工人代码。
const workerFirst = workerData[0];
const workerLast = workerData[workerData.length-1];
const limiter = workerLast - workerFirst +1;
console.log(workerFirst, workerLast, limiter)
const diff = async () => {
const today = await mergeDB.find({"userComputer.operating system":{$in: ["Microsoft Windows NT Workstation 10.0", "Microsoft Windows NT Workstation 10.0 (Tablet Edition)"]}}).sort({"program name": 1}).limit(limiter).skip(workerFirst)
const yesterday = await mergeDB_backup.find({"userComputer.operating system":{$in: ["Microsoft Windows NT Workstation 10.0", "Microsoft Windows NT Workstation 10.0 (Tablet Edition)"]}}).sort({"program name": 1})
var timestamp = new Date()
console.log("starting work " + workerFirst +"-"+workerLast+" @ " + timestamp)
let softwareChange = [];
var theSame = 0;
var newRecord = 0;
for (var i = 0; i < today.length; i++) {
var flag = 0;
var machineid = today[i]["machineid"];
var machineName = today[i]["userComputer"][0]["name"];
var programName = today[i]["program name"];
var version = today[i]["version"];
var status = today[i]["Status"]
for (var n = 0; yesterday.length > n; n++) {
var machineidBak = yesterday[n]["machineid"];
var programNameBak = yesterday[n]["program name"];
var versionBak = yesterday[n]["version"];
var statusBak = yesterday[n]["Status"]
if (programName == programNameBak && status == statusBak) {
theSame++
flag = 1;
break
}
}
if (flag == 0) {
softwareChange.push( {
timestamp:new Date,
machineid,
machineName,
programName,
version,
status
});
newRecord++;
}
}
await NewSoftware.insertMany(softwareChange)
console.log("Worker "+ workerFirst +"-"+workerLast+" finished @ " + new Date());
console.log(newRecord);
await mongoose.connection.close();
process.exit();
}
diff()
.catch(console.log);
现在的问题是,如果我process.exit()
在代码中留下一些工作线程不会完成他们被杀死的代码。一些线程确实设法输出了console.log("Worker "+ workerFirst +"-"+workerLast+" finished @ " + new Date());
一些没有,并且没有一个线程设法输出,console.log(newRecord);
但代码将完成,然后将继续工作程序生成文件中的代码。如果我省略了 process.exit() 工作人员工作正常,我会看到所有 console.logs 但代码将永远不会结束,我必须手动终止脚本(ctrl+ C)。
任何人都可以看到发生这种情况的明显原因吗?