2013-03-21 22 views
5

Tamamen yeni başlayan bir node.js kullanıcısıyım. Tüm cpu çekirdeklerinde dizeleri işleyen bir işlevi yürüten bir kod parçam var ve hangi işlevin ilk önce kimliği tamamladığını ve her işçiyi (ya da yalnızca çıkış düğümünden) öldürdüğünü belirlemek istiyorum.İşlev bittikten sonra noiling.js çalışanları Killing

İşte benim programın basitleştirilmiş kod:

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... 
} 

Bu kod çalışır ve Yani sorun olduğunu computeString() işlevi

else if (cluster.isWorker) {} 

dışına idam etmekten çok daha hızlı bitirir sonra Bir işçi/süreç fonksiyonu tamamlarsa, düğüm her işlem işini yapana kadar bekler ve bunlardan sonra sona ermez, her işlem ctrl + c tuşlarına basana kadar boşta kalır.

Benim yaklaşımım vardı:

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

Ama burada soruyorum çünkü, belli ki çalışmıyor :)

cevap

7

ilk işçi kendi işini yapmıştır Yani tüm işçileri öldürmek istiyorum ?

... 
cluster.on('exit', function(worker, code, signal) { 
    console.log('worker ' + worker.process.pid + ' died'); 
    // kill the other workers. 
    for (var id in cluster.workers) { 
    cluster.workers[id].kill(); 
    } 
    // exit the master process 
    process.exit(0); 
}); 
... 
function computeString() { 
    // Code to compute... 
    if (done) { 
    process.exit(0); // exit the worker process cleanly, triggering the 'exit' event 
    } 
}; 
+1

i öldürmek ve bir koşul doğru olduğunda tek işçiyi tek yeniden başlatmak istiyorum dosyamın, tam olarak bu kullanım durumuna bağlı olduğunu – mithra

+0

@mithra hakkında bizi aydınlatabilir ediniz. Belki de, yapmaya çalıştığınız şeyi tam olarak açıklayan yeni bir soru oluşturabilirsiniz. – robertklep

İlgili konular