2017-09-30 4 views
0

J'ai le maître et les ouvriers qui calculent quelque chose en parallèle.Résumer les valeurs des travailleurs NodeJS

Comment résumer leurs résultats? Après que chaque travailleur a fait son travail, il se tue et la variable 'res' n'a aucune valeur, il est donc impossible de l'accumuler dans n'importe quelle variable.

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(); 
    }); 
} 

Y at-il un moyen?

+0

Je suppose que vous devriez recevoir des promesses de chaque travailleur lorsqu'ils sont affectés à une tâche. Placez-les dans un tableau et utilisez 'Promise.all (myWorkerPromisesArray)'. – Redu

+0

Il suffit de faire en sorte que les travailleurs envoient un message du résultat avant de se tuer. Puis attrapez ces messages dans l'écouteur d'événement que vous avez ci-dessus et accumulez votre résultat. –

Répondre

0

les opérations suivantes:

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(); 
    }); 
}