kue icon indicating copy to clipboard operation
kue copied to clipboard

Change the processing concurrency

Open gravitate-dev opened this issue 8 years ago • 3 comments

I would like to be able to change the parallel rate increase/decrease during runtime. I have tried the following yet this is not working as expected.

Expected, it would output running, 1 running, 1 1 second pause running, 1 running, 1 1 second pause running, 1 running, 2 1 second pause running, 2 running, 2 1 second pause

Actual: running, 1 running, 1 running, 1 running, 1 running, 1 1 second pause running, 2 running, 2 running, 2 running, 2 running, 2 running, 2

it seems that by calling process multiple times it does not update the queue it creates multiple queues quite unexpected.

Code below: `var kue = require('kue') , myQ = kue.createQueue();

function resetRate( newRate ) { myQ.process('someTask', newRate, function(job, done){ console.log("running,",job.data.data); setTimeout(function(){ done(); },1000); //simulated delay for a task }); }; resetRate(1); //1 resetRate(1); //1 resetRate(1); //1 resetRate(2); // now it is handling 2 items in parallel. myQ.create('someTask',{data:1}).removeOnComplete(true).save(); myQ.create('someTask',{data:1}).removeOnComplete(true).save(); myQ.create('someTask',{data:1}).removeOnComplete(true).save(); myQ.create('someTask',{data:1}).removeOnComplete(true).save(); myQ.create('someTask',{data:1}).removeOnComplete(true).save(); myQ.create('someTask',{data:2}).removeOnComplete(true).save(); myQ.create('someTask',{data:2}).removeOnComplete(true).save(); myQ.create('someTask',{data:2}).removeOnComplete(true).save(); myQ.create('someTask',{data:2}).removeOnComplete(true).save(); myQ.create('someTask',{data:2}).removeOnComplete(true).save(); myQ.create('someTask',{data:2}).removeOnComplete(true).save();

/* Expected, it would handle 2 events a time Actual: it will hande 5 events at a time */`

gravitate-dev avatar Apr 08 '17 05:04 gravitate-dev

I made a very hacky workaround by naming queues of different versions because the queues can not be updated.

//I would like to be able to change the parallel rate increase/decrease during runtime. I have tried the following yet this is not working. var client = require('redis').createClient();

var kue = require('kue') , myQ = kue.createQueue();

var queueVersion = 1;

function resetRate( newRate ) { queueVersion+=1; myQ.process('v'+queueVersion, newRate, function(job, done){ console.log("running,",job.data.data,"version: ",queueVersion); setTimeout(function(){ done(); },1000); //simulated delay for a task }); } resetRate(1); resetRate(1); resetRate(1); resetRate(1); resetRate(4); setTimeout(function(){ myQ.create('v'+queueVersion,{data:1}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:1}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:1}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:1}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:2}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:2}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:2}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:2}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:3}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:3}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:3}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:3}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:4}).removeOnComplete(true).save(); myQ.create('v'+queueVersion,{data:4}).removeOnComplete(true).save(); },1000); /* Expected, it would handle 4 events a time Actual: SUCCESS! it will handes 4 events at a time */

This makes it work, but is not really a good workaround, as any events queued up in the other queues will not be affected.

gravitate-dev avatar Apr 08 '17 05:04 gravitate-dev

You cannot dynamically change the concurrency in Kue, we should implement it as a new feature.

behrad avatar Apr 15 '17 12:04 behrad

I need it too.

shiny avatar May 14 '18 07:05 shiny