Skip to content

Instantly share code, notes, and snippets.

@Kami
Created December 14, 2010 16:09
Show Gist options
  • Select an option

  • Save Kami/740635 to your computer and use it in GitHub Desktop.

Select an option

Save Kami/740635 to your computer and use it in GitHub Desktop.
var worker = require('./lib/worker').worker;
worker.addListener('message', function(msg) {
var j;
var result = 0
var i = msg.i;
// Do some work ...
for (j = 0; j < (i * 1000); j++) {
result += j;
}
// We are done
worker.postResult({'result': result});
});
var sys = require('sys');
var worker_pool_lib = require('./lib/worker_pool');
var worker_pool = new worker_pool_lib.WorkerPool(5, './worker_example.js');
// Ready is fired when all the workers have been started
worker_pool.on('ready', function() {
var worker_handle;
var workers = [];
for (var i = 0; i < 10; i++) {
// If a children does not finish (emit the result event) after 10 seconds
// it is automatically killed (new children is started, to ensure the pool size)
//
// Note: If all the children are busy the task won't started instantly
worker_handle = worker_pool.run_in_pool({'i': i}, 10000);
workers.push(worker_handle);
// Can also forcefully terminate it (wont wait for check to fire the finish event)
// worker_handle.terminate(forcefully = true)
(worker_handle.on('finish', function(result) {
// When the finish event is emitted, worker is automatically freed and
// put back to the list of the available workers
sys.error('Worker ' + i + ' finished, result: ' + result.result);
})(i));
(worker_handle.on('error', function(err) {
sys.error('Worker ' + i + ' encountered error, error: ' + err);
})(i));
(worker_handle.on('timeout', function() {
sys.error('Worker ' + i + ' timed out');
})(i));
}
// worker_pool.resize(new_size, forcefully = false);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment