Подводя итоги работы работников 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();
    });
}
Другие вопросы по тегам