Skip to content

Instantly share code, notes, and snippets.

@bernardeli
Created April 23, 2011 17:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bernardeli/938785 to your computer and use it in GitHub Desktop.
Save bernardeli/938785 to your computer and use it in GitHub Desktop.
benchmark for named queues
require 'spec/spec_helper'
require 'logger'
require 'benchmark'
# Delayed::Worker.logger = Logger.new('/dev/null')
Benchmark.bm(10) do |x|
Delayed::Job.delete_all
n = 3000*3
n.times { "foo".delay.length }
x.report { Delayed::Worker.new(:quiet => true).work_off(n) }
end
# Working off just one queue
Benchmark.bm(10) do |x|
Delayed::Job.delete_all
n = 3000
n.times { "foo".delay(:queue => 'one').length }
n.times { "foo".delay(:queue => 'two').length }
n.times { "foo".delay(:queue => 'three').length }
x.report { Delayed::Worker.new(:queues => %w( one ), :quiet => true).work_off(n) }
puts "Left jobs on queue one: #{Delayed::Job.where(:queue => 'one').count}"
puts "Left jobs on queue two: #{Delayed::Job.where(:queue => 'two').count}"
puts "Left jobs on queue three: #{Delayed::Job.where(:queue => 'three').count}"
end
# Working off two queues
Benchmark.bm(10) do |x|
Delayed::Job.delete_all
n = 3000
n.times { "foo".delay(:queue => 'one').length }
n.times { "foo".delay(:queue => 'two').length }
n.times { "foo".delay(:queue => 'three').length }
x.report { Delayed::Worker.new(:queues => %w( one two ), :quiet => true).work_off(n*2) }
puts "Left jobs on queue one: #{Delayed::Job.where(:queue => 'one').count}"
puts "Left jobs on queue two: #{Delayed::Job.where(:queue => 'two').count}"
puts "Left jobs on queue three: #{Delayed::Job.where(:queue => 'three').count}"
end
# Working off all queues
Benchmark.bm(10) do |x|
Delayed::Job.delete_all
n = 3000
n.times { "foo".delay(:queue => 'one').length }
n.times { "foo".delay(:queue => 'two').length }
n.times { "foo".delay(:queue => 'three').length }
x.report { Delayed::Worker.new(:quiet => true).work_off(n*4) }
puts "Left jobs on queue one: #{Delayed::Job.where(:queue => 'one').count}"
puts "Left jobs on queue two: #{Delayed::Job.where(:queue => 'two').count}"
puts "Left jobs on queue three: #{Delayed::Job.where(:queue => 'three').count}"
end
@bernardeli
Copy link
Author

Results:

First case, when have no queue previously set:

            user     system      total        real
       30.990000   2.400000  33.390000 ( 51.578268)

Second case, when have one queue to work off:

            user     system      total        real
       11.030000   0.750000  11.780000 ( 18.054968)

       Left jobs on queue one: 0
       Left jobs on queue two: 3000
       Left jobs on queue three: 3000

Third case, when it has to work off jobs from two queues:

            user     system      total        real
       22.370000   1.520000  23.890000 ( 36.931935)

       Left jobs on queue one: 0
       Left jobs on queue two: 0
       Left jobs on queue three: 3000

Last case, must work off all queues, once worker has no named queues set:

            user     system         total        real
       31.110000   2.490000  33.600000 ( 53.829382)

       Left jobs on queue one: 0
       Left jobs on queue two: 0
       Left jobs on queue three: 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment