mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
reworked deferred pool and now it's used instead of makeDeferredsQ(..)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
7e045c9c7f
commit
a451547470
@ -368,7 +368,7 @@ if(window.CEF_dumpJSON != null){
|
||||
|
||||
// attach the workers to the queue...
|
||||
$.each(gids, function(_, gid){
|
||||
queue.enqueue(makeImagePreviews, gid, sizes, mode)
|
||||
queue.enqueue(null, makeImagePreviews, gid, sizes, mode)
|
||||
// XXX do we need to report seporate previews???
|
||||
//.progress(function(state){ queue.notify(state) })
|
||||
.always(function(){ queue.notify(gid, 'done') })
|
||||
|
||||
13
ui/files.js
13
ui/files.js
@ -843,7 +843,8 @@ function exportImagesTo(path, im_name, dir_name, size){
|
||||
selection.sort(imageOrderCmp)
|
||||
var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2)
|
||||
|
||||
var pool = makeDefferedPool()
|
||||
// use an external pool...
|
||||
var pool = makeDeferredPool()
|
||||
.depleted(function(){
|
||||
showStatusQ('Export: done.')
|
||||
res.resolve()
|
||||
@ -865,7 +866,7 @@ function exportImagesTo(path, im_name, dir_name, size){
|
||||
var o = selection.indexOf(gid) + ''
|
||||
dest = dest.replace('%i', (z + o).slice(o.length))
|
||||
|
||||
pool.enqueue(null, exportImageTo, [gid, path, dest, size])
|
||||
pool.enqueue(exportImageTo, gid, path, dest, size)
|
||||
}
|
||||
|
||||
path = normalizePath(path +'/'+ dir_name)
|
||||
@ -935,8 +936,6 @@ function readImagesOrientationQ(gids, no_update_loaded){
|
||||
// attach workers to queue...
|
||||
$.each(gids, function(_, gid){
|
||||
last = queue.enqueue(readImageOrientation, gid, no_update_loaded)
|
||||
.done(function(){ queue.notify(gid, 'done') })
|
||||
.fail(function(){ queue.notify(gid, 'fail') })
|
||||
})
|
||||
|
||||
return queue
|
||||
@ -970,7 +969,7 @@ function readImagesDatesQ(images){
|
||||
queue.enqueue(readImageDate, gid, images)
|
||||
.always(function(){
|
||||
imageUpdated(gid)
|
||||
queue.notify(gid, 'done')
|
||||
//queue.notify(gid, 'done')
|
||||
})
|
||||
})
|
||||
|
||||
@ -1025,7 +1024,9 @@ function updateImagesGIDsQ(images, data){
|
||||
|
||||
$.each(images, function(_, key){
|
||||
queue.enqueue(updateImageGID, key, images, data)
|
||||
.always(function(){ queue.notify(key, 'done') })
|
||||
.always(function(){
|
||||
//queue.notify(key, 'done')
|
||||
})
|
||||
})
|
||||
|
||||
return queue
|
||||
|
||||
@ -640,7 +640,7 @@ function makeDeferredsQ(first){
|
||||
//
|
||||
// NOTE: .enqueue(...) accepts a worker and any number of the arguments
|
||||
// to be passed to the worker when it's its turn.
|
||||
// NOTE: the worker must porduce a deffered/promice.
|
||||
// NOTE: the worker must porduce a deferred/promice.
|
||||
queue.enqueue = function(worker){
|
||||
var cur = $.Deferred()
|
||||
var args = Array.apply(null, arguments).slice(1)
|
||||
@ -730,14 +730,14 @@ function makeDeferredsQ(first){
|
||||
|
||||
// Deferred worker pool...
|
||||
//
|
||||
// makeDefferedPool([size][, paused]) -> pool
|
||||
// makeDeferredPool([size][, paused]) -> pool
|
||||
//
|
||||
//
|
||||
// This will create and return a pooled queue of deferred workers.
|
||||
//
|
||||
// Public interface:
|
||||
//
|
||||
// .enqueue(obj, func, args) -> pool
|
||||
// .enqueue(obj, func, args) -> deferred
|
||||
// Add a worker to queue.
|
||||
// If the pool is not filled and not paused, this will run the
|
||||
// worker right away.
|
||||
@ -793,7 +793,7 @@ function makeDeferredsQ(first){
|
||||
//
|
||||
//
|
||||
// XXX should this be an object or a factory???
|
||||
function makeDefferedPool(size, paused){
|
||||
function makeDeferredPool(size, paused){
|
||||
size = size == null ? POOL_SIZE : size
|
||||
size = size < 0 ? 1
|
||||
: size > 512 ? 512
|
||||
@ -813,7 +813,7 @@ function makeDefferedPool(size, paused){
|
||||
_paused: paused,
|
||||
}
|
||||
|
||||
Pool._run = function(obj, func, args){
|
||||
Pool._run = function(deferred, func, args){
|
||||
var that = this
|
||||
var pool = this.pool
|
||||
var pool_size = this.size
|
||||
@ -821,13 +821,13 @@ function makeDefferedPool(size, paused){
|
||||
var run = this._run
|
||||
|
||||
// run an element from the queue...
|
||||
var worker = func.apply(obj, args)
|
||||
var worker = func.apply(null, args)
|
||||
.always(function(){
|
||||
// prepare to remove self from pool...
|
||||
var i = pool.indexOf(worker)
|
||||
|
||||
Pool._progress_handlers.forEach(function(func){
|
||||
func(that, pool.length - pool.len(), pool.length + queue.length)
|
||||
func(worker, pool.length - pool.len(), pool.length + queue.length)
|
||||
})
|
||||
|
||||
// remove self from queue...
|
||||
@ -875,6 +875,13 @@ function makeDefferedPool(size, paused){
|
||||
Pool._fail_handlers.forEach(function(func){
|
||||
func(that, pool.length - pool.len(), pool.length + queue.length)
|
||||
})
|
||||
deferred.reject.apply(deferred, arguments)
|
||||
})
|
||||
.progress(function(){
|
||||
deferred.notify.apply(deferred, arguments)
|
||||
})
|
||||
.done(function(){
|
||||
deferred.resolve.apply(deferred, arguments)
|
||||
})
|
||||
|
||||
this.pool.push(worker)
|
||||
@ -904,13 +911,17 @@ function makeDefferedPool(size, paused){
|
||||
|
||||
// Add a worker to queue...
|
||||
//
|
||||
Pool.enqueue = function(obj, func, args){
|
||||
Pool.enqueue = function(func){
|
||||
var deferred = $.Deferred()
|
||||
|
||||
// add worker to queue...
|
||||
this.queue.push([obj, func, args])
|
||||
this.queue.push([deferred, func, args2array(arguments).slice(1)])
|
||||
|
||||
// start work if we have not already...
|
||||
this._fill()
|
||||
return this
|
||||
|
||||
//return this
|
||||
return deferred
|
||||
}
|
||||
|
||||
// Drop the queued workers...
|
||||
|
||||
@ -15,16 +15,16 @@ var WORKERS = {}
|
||||
/********************************************************* Workers ***/
|
||||
|
||||
// get/create a named worker queue...
|
||||
function getWorkerQueue(name, no_auto_start){
|
||||
//
|
||||
// XXX rename this to task-related.... (???)
|
||||
function getWorkerQueue(name, pool_size, no_auto_start){
|
||||
// XXX 1 is the default for compatibility...
|
||||
pool_size = pool_size == null ? 1 : pool_size
|
||||
|
||||
// create a new worker queue...
|
||||
if(WORKERS[name] == null){
|
||||
var queue = makeDeferredsQ()
|
||||
var queue = makeDeferredPool(pool_size, no_auto_start)
|
||||
WORKERS[name] = queue
|
||||
// start if needed...
|
||||
if(!no_auto_start){
|
||||
queue.start()
|
||||
}
|
||||
|
||||
// return existing worker queue...
|
||||
} else {
|
||||
@ -38,15 +38,21 @@ function getWorkerQueue(name, no_auto_start){
|
||||
// kill all worker queues...
|
||||
function killAllWorkers(){
|
||||
for(var k in WORKERS){
|
||||
if(WORKERS[k].isWorking()){
|
||||
if(WORKERS[k].isRunning()){
|
||||
console.log('Worker: Stopped:', k)
|
||||
}
|
||||
WORKERS[k].kill()
|
||||
WORKERS[k].dropQueue()
|
||||
}
|
||||
WORKERS = {}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* vim:set ts=4 sw=4 : */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user