Подводя итоги работы работников NodeJS
У меня есть мастер и рабочие, которые вычисляют что-то параллельно.
Как подвести итоги?
После того, как каждый работник выполнил свою работу, он убивает себя, и переменная 'res' не имеет значения, поэтому невозможно накапливать ее в какой-либо переменной.
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
const worker = cluster.fork();
worker.send({ mydata: array[i] });
}
} else {
process.on('message', (msg) => {
res = AnyFunction(msg.mydata, dx, f);
console.log('Result of ' + pid + ' worker: ' + res);
process.exit();
});
}
Там в любом случае?
1 ответ
Решение
Попробуйте следующее:
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
const worker = cluster.fork();
worker.send({ mydata: array[i] });
let sum = 0;
worker.on('message', res => sum+=res);
}
} else {
process.on('message', (msg) => {
res = AnyFunction(msg.mydata, dx, f);
console.log('Result of ' + pid + ' worker: ' + res);
process.send(res);
process.exit();
});
}