Resque Concurrent Restriction is a plugin for the Resque queueing system. It allows one to specify how many of the given job can run concurrently.
Resque Concurrent Restriction requires Resque 1.25 and redis 2.2
Install it from the command-line:
gem install resque-concurrent-restriction
or add it to your
gem 'resque-concurrent-restriction', '~> 0.6'
It is especially useful when a system has intensive jobs for which you should only run a few at a time. What you should do for the IntensiveJob is to make it extend Resque::Plugins::ConcurrentRestriction and specify the concurrent limit (defaults to 1). For example:
class IntensiveJob extend Resque::Plugins::ConcurrentRestriction concurrent 4 def perform # ... end end
That means the IntensiveJob can not have more than 4 jobs running simultaneously.
One can also make the concurrency limit depend on the parameters of a job. For example, if you always pass a user_id as the first parameter, you can restrict the job to run N concurrent jobs per user:
class IntensiveJob extend Resque::Plugins::ConcurrentRestriction concurrent 4 def self.concurrent_identifier(*args) args.first.to_s end def perform # ... end end
Matt Conway :: email@example.com :: @mattconway
Copyright (c) 2011 Matt Conway. See LICENSE for details.