mirror of
https://github.com/harish2704/node-job-manager.git
synced 2026-09-10 13:11:08 +00:00
Heavy rewrite
This commit is contained in:
+71
-39
@@ -1,44 +1,76 @@
|
||||
/*global describe, it, before, beforeEach, after, afterEach, should */
|
||||
|
||||
var JobManager = require('../src/JobManager.js').JobManager;
|
||||
var utils = require('../src/utils.js');
|
||||
var range = utils.range;
|
||||
var should = require('should');
|
||||
|
||||
var wrks = range(400000);
|
||||
wrks.forEach( function(v,k){
|
||||
wrks[k] = function(data,cb){
|
||||
var self = this;
|
||||
process.nextTick(function(){
|
||||
// console.log( 'I am done: ', v );
|
||||
cb( null, data);
|
||||
} );
|
||||
var NO_WORKERS = 5;
|
||||
var workers = [], i;
|
||||
for ( i = 0; i < NO_WORKERS; i ++) {
|
||||
workers[i] = function( data, cb ){
|
||||
console.log(i, ' Processing ', data );
|
||||
setTimeout( function(){
|
||||
console.log( 'Iam ', i, ' Processed ', data );
|
||||
}, i*10 );
|
||||
};
|
||||
wrks[k].id = v;
|
||||
workers[i].name = i;
|
||||
}
|
||||
var NO_TASKS=100;
|
||||
|
||||
var tasks = utils.range( NO_TASKS );
|
||||
|
||||
var TEST_CONCURENCY = 3;
|
||||
|
||||
describe('JobManager', function(){
|
||||
|
||||
describe('Initialization', function(){
|
||||
var jm = new JobManager( { concurrency: TEST_CONCURENCY });
|
||||
jm.work = function( task, worker, cb ){
|
||||
worker( task , cb );
|
||||
};
|
||||
jm.workers = workers;
|
||||
jm.tasks = tasks;
|
||||
jm.onError = function(err, task, worker ){
|
||||
console.log( 'Error...', arguments );
|
||||
};
|
||||
jm.onLoadMore = function( cb ){
|
||||
console.log( 'Loading......');
|
||||
this.tasks = this.tasks.concat( tasks );
|
||||
return cb();
|
||||
};
|
||||
it('should Initialize properly', function(done){
|
||||
jm.concurrency = jm.workers.length -1;
|
||||
jm.updateState();
|
||||
jm.tmpPool.should.have.length(NO_WORKERS);
|
||||
jm.concurrency = jm.workers.length +1;
|
||||
jm.updateState();
|
||||
jm.tmpPool.should.have.length(NO_WORKERS*2);
|
||||
|
||||
jm.tasks.should.have.length( NO_TASKS );
|
||||
jm.workers.should.have.length( NO_WORKERS );
|
||||
jm.runningTasks.should.be.equal(0);
|
||||
done();
|
||||
});
|
||||
|
||||
it('getFromPool, returnToPool', function(done){
|
||||
var store = [], i, w;
|
||||
for( i =0; i< jm.concurrency; i++ ){
|
||||
w = jm.getFromPool();
|
||||
jm.runningTasks.should.be.equal( i+1);
|
||||
should.exist( w );
|
||||
store.push(w);
|
||||
}
|
||||
for( i =0; i< 6; i++ ){
|
||||
w = jm.getFromPool();
|
||||
jm.runningTasks.should.be.equal( jm.concurrency );
|
||||
should.not.exist( w );
|
||||
}
|
||||
store.forEach( function(v, i){
|
||||
jm.returnToPool(v);
|
||||
jm.runningTasks.should.be.equal( jm.concurrency-i-1 );
|
||||
});
|
||||
jm.runningTasks.should.be.equal( 0 );
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
var tStart = 0;
|
||||
var getTasks = function(){
|
||||
var i, out=[];
|
||||
for( i = 0; i< 1000; i++, tStart++ ){
|
||||
out[i] = tStart;
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
||||
var tasks = getTasks();
|
||||
|
||||
var jm = new JobManager({concurrency:3});
|
||||
jm.tasks = tasks;
|
||||
jm.workers = wrks;
|
||||
jm.onError = function(err, task, worker ){
|
||||
console.log( 'Error...', arguments );
|
||||
};
|
||||
|
||||
jm.work = function(task, worker, cb){
|
||||
// console.log( 'Worker ', worker.id, ' with ', task );
|
||||
return worker( task, cb );
|
||||
};
|
||||
jm.onLoadMore = function( cb ){
|
||||
console.log( 'Loading......');
|
||||
this.tasks = this.tasks.concat( getTasks() );
|
||||
return cb();
|
||||
};
|
||||
jm.start();
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
var JobManager = require('../src/JobManager.js').JobManager;
|
||||
var utils = require('../src/utils.js');
|
||||
var range = utils.range;
|
||||
var async = require('async');
|
||||
|
||||
var wrks = range(4);
|
||||
wrks.forEach( function(v,k){
|
||||
wrks[k] = function(data,cb){
|
||||
console.log( 'S ', data );
|
||||
setTimeout( function(){
|
||||
console.log( 'E ', data );
|
||||
cb();
|
||||
} , ( 1 ) * 1000 );
|
||||
};
|
||||
wrks[k].id = v;
|
||||
});
|
||||
|
||||
var tStart = 0;
|
||||
var getTasks = function(){
|
||||
var i, out=[];
|
||||
for( i = 0; i< 50; i++, tStart++ ){
|
||||
out[i] = tStart;
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
||||
var tasks = getTasks();
|
||||
if(0){
|
||||
console.log( tasks.length );
|
||||
var y = 0;
|
||||
async.eachLimit( tasks, 300, function( data, cb ){
|
||||
setTimeout( function(){
|
||||
console.log( data );
|
||||
cb();
|
||||
} , 1);
|
||||
}, console.log );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var jm = new JobManager({concurrency: 6});
|
||||
jm.tasks = tasks;
|
||||
jm.workers = wrks;
|
||||
jm.onError = function(err, task, worker ){
|
||||
console.log( 'Error...', arguments );
|
||||
};
|
||||
|
||||
jm.work = function(task, worker, cb){
|
||||
// console.log( 'Worker ', worker.id, ' with ', task );
|
||||
return worker( task, cb );
|
||||
};
|
||||
jm.onLoadMore = function( cb ){
|
||||
console.log( 'Loading......');
|
||||
this.tasks = this.tasks.concat( getTasks() );
|
||||
return cb();
|
||||
};
|
||||
// jm.start();
|
||||
jm._start();
|
||||
Reference in New Issue
Block a user