Ich bin ein total node.js Neuling, der gerade damit begonnen hat, daran zu basteln. Ich habe ein Stück Code, der eine Funktion ausführt, die Zeichenfolgen auf allen CPU-Kernen verarbeitet, und ich möchte bestimmen, welcher Arbeiter die Funktion zuerst durch seine ID abgeschlossen hat, und danach jeden Arbeiter töten (oder einfach den Knoten verlassen).Killing node.js Arbeiter nach der Funktion ist fertig
Hier ist der vereinfachte Code meines Programms:
var cluster = require('cluster'),
cpus = require("os").cpus().length, // 4 cores
myArray = ["foo","bar","baz","qux"]; // 1 string per core
if (cluster.isMaster) {
for (var i = 0; i < cpus; i++) {
var worker = cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else if (cluster.isWorker) {
computeString(myArray[cluster.worker.id]);
}
function computeString() {
// Code to compute...
}
Dieser Code funktioniert, und die computeString() Funktion beendet viel schneller, als es außerhalb des dass
else if (cluster.isWorker) {}
So das Problem der Ausführung ist nach Ein Arbeiter/Prozess vervollständigt die Funktion, der Knoten wartet, bis jeder Prozess seine Arbeit erledigt hat und endet nicht danach, jeder Prozess bleibt im Leerlauf, bis ich ctrl + c drücke.
Mein Ansatz war:
function computeString() {
// Code to compute...
if (done) {
console.log("Worker #" + cluster.worker + " completed the task!");
for (var id in cluster.workers) {
cluster.workers[id].kill();
}
}
}
Aber da frage ich hier, es offensichtlich nicht funktioniert :)
meinem Fall i töten wollen und Arbeiter nacheinander neu starten, wenn eine Bedingung erfüllt wird, Schuppen bitte kein Licht an diesem – mithra
@mithra dies über den genauen Anwendungsfall abhängt. Vielleicht erstellen Sie eine neue Frage, in der Sie genau beschreiben, was Sie erreichen möchten. – robertklep