Created
December 14, 2010 16:09
-
-
Save Kami/740635 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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}); | |
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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