[Backgroundrb-devel] Req: Workers as singletons

Ezra Zygmuntowicz ezmobius at gmail.com
Mon Jul 3 16:19:42 EDT 2006

On Jul 3, 2006, at 8:28 AM, Günter Ladwig wrote:

> Hi,
> it would be nice to be able to specify workers as singletons. By this
> I mean that every call to the new_worker method returns the same
> instance of said worker. This can be done transparently either by
> adding a new argument to new_worker (something like :singleton =>
> true) or adding a new method, like I did in my installation of
> BackgrounDrb:
>      def get_worker_by_class(klass)
>        klasse = klass.to_s.split('_').inject('') { |total,part| total
> << part.capitalize }
>        @jobs.each do |e|
>          @logger.debug e.inspect
>          if e[1].class.name == klasse
>            return e[0]
>          end
>        end
>        return nil
>      end
>      def new_singleton_worker(opts={})
>        @mutex.synchronize {
>          worker = get_worker_by_class(opts[:class])
>          if worker.nil?
>            job_key = opts[:job_key] || gen_key
>            unless self[job_key]
>              self[job_key] = instantiate_worker(opts[:class]).new(opts
> [:args])
>              return job_key
>            else
>              raise "job_key: #{job_key} already refers to a running
> worker"
>            end
>          else
>            return worker
>          end
>        }
>      end
> First the jobs array is checked if an instance of the requested
> worker class is already available. If yes, it's returned otherwise a
> new instance is created using the standard instantiate_worker method.
> Could you include something like this in the next version?
> Günter

Hi Gunter-

  	I can add a singleton type worker probably. Can you tell me what  
your use case is for needing this? I'm curious as to how you would  
use or what you plan on doing with singleton workers. Are you  
defining your worker classes as actual singletons using include  
Singleton? If so then maybe I can make a different type of superclass  
to inherit your workers from that is a true singleton. I'll have to  
think about it a bit. I just added new job management stuff to the  
threading model so I will have to work that in with your singleton  
idea but I'm sure I can come up with a nice way of doing this for you.


More information about the Backgroundrb-devel mailing list