mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 19:00:09 +00:00 
			
		
		
		
	worker pool now working...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									b319760129
								
							
						
					
					
						commit
						c45405f608
					
				| @ -843,12 +843,12 @@ function exportImagesTo(path, im_name, dir_name, size){ | |||||||
| 	var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2) | 	var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2) | ||||||
| 
 | 
 | ||||||
| 	var res = $.Deferred() | 	var res = $.Deferred() | ||||||
| 	var pool_size = 100 | 	var pool = makeDefferedPool() | ||||||
| 	var pool = makeDefferedPool(pool_size) |  | ||||||
| 		.depleted(function(){ | 		.depleted(function(){ | ||||||
| 			showStatusQ('Export: done.') | 			showStatusQ('Export: done.') | ||||||
| 			res.resolve() | 			res.resolve() | ||||||
| 		}) | 		}) | ||||||
|  | 	window.Pool = pool | ||||||
| 
 | 
 | ||||||
| 	// go through ribbons...
 | 	// go through ribbons...
 | ||||||
| 	for(var i=DATA.ribbons.length-1; i >= 0; i--){ | 	for(var i=DATA.ribbons.length-1; i >= 0; i--){ | ||||||
| @ -866,6 +866,7 @@ function exportImagesTo(path, im_name, dir_name, size){ | |||||||
| 			var o = selection.indexOf(gid) + '' | 			var o = selection.indexOf(gid) + '' | ||||||
| 			dest = dest.replace('%i', (z + o).slice(o.length)) | 			dest = dest.replace('%i', (z + o).slice(o.length)) | ||||||
| 
 | 
 | ||||||
|  | 			//exportImageTo(gid, path, dest, size)
 | ||||||
| 			pool.enqueue(null, exportImageTo, [gid, path, dest, size]) | 			pool.enqueue(null, exportImageTo, [gid, path, dest, size]) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,6 +9,8 @@ | |||||||
| 
 | 
 | ||||||
| //var DEBUG = DEBUG != null ? DEBUG : true
 | //var DEBUG = DEBUG != null ? DEBUG : true
 | ||||||
| 
 | 
 | ||||||
|  | var POOL_SIZE = 64 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*********************************************************************/ | /*********************************************************************/ | ||||||
| @ -727,15 +729,24 @@ function makeDeferredsQ(first){ | |||||||
| 
 | 
 | ||||||
| // XXX should this be an object or a factory???
 | // XXX should this be an object or a factory???
 | ||||||
| function makeDefferedPool(size){ | function makeDefferedPool(size){ | ||||||
| 	var pool = { | 	size = size == null ? POOL_SIZE : size | ||||||
|  | 	size = size < 0 ? 1  | ||||||
|  | 		: size > 512 ? 512 | ||||||
|  | 		: size | ||||||
|  | 
 | ||||||
|  | 	var Pool = { | ||||||
| 		pool: [], | 		pool: [], | ||||||
| 		size: size, | 		size: size, | ||||||
| 		queue: [], | 		queue: [], | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	pool._deplete_handlers = [] | 	var len = function(){ | ||||||
|  | 		return Pool.pool.filter(function(){ return true }).length | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	pool._run = function(obj, func, args){ | 	Pool._deplete_handlers = [] | ||||||
|  | 
 | ||||||
|  | 	Pool._run = function(obj, func, args){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		var pool = this.pool | 		var pool = this.pool | ||||||
| 		var pool_size = this.size | 		var pool_size = this.size | ||||||
| @ -749,9 +760,9 @@ function makeDefferedPool(size){ | |||||||
| 				var i = pool.indexOf(worker) | 				var i = pool.indexOf(worker) | ||||||
| 
 | 
 | ||||||
| 				// shrink the pool if it's overfilled...
 | 				// shrink the pool if it's overfilled...
 | ||||||
| 				if(pool.length > pool_size){ | 				if(len(pool) > pool_size){ | ||||||
| 					// remove self...
 | 					// remove self...
 | ||||||
| 					pool.splice(i, 1) | 					delete pool[i] | ||||||
| 					return | 					return | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| @ -761,15 +772,16 @@ function makeDefferedPool(size){ | |||||||
| 				// run the next worker if it exists...
 | 				// run the next worker if it exists...
 | ||||||
| 				if(next != null){ | 				if(next != null){ | ||||||
| 					// replace self with next worker...
 | 					// replace self with next worker...
 | ||||||
| 					pool[i] = run.apply(that, next) | 					run.apply(that, next) | ||||||
|  | 					delete pool[i] | ||||||
| 
 | 
 | ||||||
| 				// nothing in queue...
 | 				// nothing in queue...
 | ||||||
| 				} else { | 				} else { | ||||||
| 					// remove self...
 | 					// remove self...
 | ||||||
| 					pool.splice(i, 1) | 					delete pool[i] | ||||||
| 
 | 
 | ||||||
| 					// empty queue and empty pool mean we are done...
 | 					// empty queue AND empty pool mean we are done...
 | ||||||
| 					if(pool.length == 0){ | 					if(len(pool) == 0){ | ||||||
| 						that._deplete() | 						that._deplete() | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| @ -777,49 +789,54 @@ function makeDefferedPool(size){ | |||||||
| 				// keep the pool full...
 | 				// keep the pool full...
 | ||||||
| 				that._fill() | 				that._fill() | ||||||
| 			}) | 			}) | ||||||
| 			.fial(function(){ | 			.fail(function(){ | ||||||
| 				// XXX
 | 				// XXX
 | ||||||
|  | 				//queue.splice(0, queue.length)
 | ||||||
| 			}) | 			}) | ||||||
| 
 | 
 | ||||||
|  | 		this.pool.push(worker) | ||||||
|  | 
 | ||||||
| 		return worker | 		return worker | ||||||
| 	} | 	} | ||||||
| 	pool._fill = function(){ | 	Pool._fill = function(){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		var pool = this.pool |  | ||||||
| 		var pool_size = this.size | 		var pool_size = this.size | ||||||
| 		var run = this._run | 		var run = this._run | ||||||
| 		var res = [] | 		var l = len(this.pool) | ||||||
| 
 | 
 | ||||||
| 		if(pool.length < pool_size && this.queue.length > 0){ | 		if(l < pool_size && this.queue.length > 0){ | ||||||
| 			res = this.queue.splice(0, pool_size - pool.length) | 			this.queue.splice(0, pool_size - l) | ||||||
| 				.forEach(function(e){ | 				.forEach(function(e){ | ||||||
| 					pool.push = run.apply(that, e) | 					run.apply(that, e) | ||||||
| 				}) | 				}) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		return res | 		return this | ||||||
| 	} | 	} | ||||||
| 	pool._deplete(){ | 	Pool._deplete = function(){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		this._done_handlers.forEach(function(func){ | 		this._deplete_handlers.forEach(function(func){ | ||||||
| 			func(that) | 			func(that) | ||||||
| 		}) | 		}) | ||||||
|  | 		return this | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// public methods...
 | 	// public methods...
 | ||||||
| 	pool.enqueue = function(obj, func, args){ | 	Pool.enqueue = function(obj, func, args){ | ||||||
| 		// add worker to queue...
 | 		// add worker to queue...
 | ||||||
| 		this.queue.push([obj, func, args]) | 		this.queue.push([obj, func, args]) | ||||||
| 
 | 
 | ||||||
| 		// start work if we have not already...
 | 		// start work if we have not already...
 | ||||||
| 		this._fill() | 		this._fill() | ||||||
|  | 		return this | ||||||
| 	} | 	} | ||||||
| 	// This is called after the pool is populated and depleted...
 | 	// This is called after the pool is populated and depleted...
 | ||||||
| 	pool.depleted = function(func){ | 	Pool.depleted = function(func){ | ||||||
| 		this._deplete_handlers.push(func) | 		this._deplete_handlers.push(func) | ||||||
|  | 		return this | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return pool | 	return Pool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user