From 81aead2752316c187255d6732dcb14a46b9c4f05 Mon Sep 17 00:00:00 2001 From: Patrick J Cherry Date: Tue, 17 Feb 2015 21:04:52 +0000 Subject: fix the redis queue not to melt the cpu when polling redis for a job --- lib/custodian/queue.rb | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/custodian/queue.rb b/lib/custodian/queue.rb index 67c5346..9a7d90f 100644 --- a/lib/custodian/queue.rb +++ b/lib/custodian/queue.rb @@ -85,13 +85,28 @@ end # - # Fetch a job from the queue - the timeout parameter is ignored. + # Fetch a job from the queue. + # + # The timeout is used to specify the period we wait for a new job. # def fetch(timeout) - job = false - while( ! job ) + job = nil + timeout ||= 0 + + # + # Don't melt the CPU. + # + sleep_interval = 0.5 + + loop do job = @redis.lpop( "queue" ) + break if job or timeout < 0 + + sleep( sleep_interval ) + + timeout -= sleep_interval end + return( job ) end -- cgit v1.2.1