[Backgroundrb-devel] When does a worker terminate

hemant gethemant at gmail.com
Fri Feb 27 13:05:12 EST 2009

On Fri, Feb 27, 2009 at 11:07 PM,  <Tuong.Le at emulex.com> wrote:
> I think #exit is what I was looking for but all your feedback got me questioning whether I am using backgroundrb the right way, or the most optimized way.  Please advise.
> I was thinking of having my Rails app creating a new worker (Middleman.NEW_worker ...) EVERYTIME a time-consuming task is requested.  As a result, I could have thousands of workers running at the same time.  In my case, my Rails don't need to monitor the worker status, so I can just use #exit when a worker is done with its task.
> Questions:
> 1. Should I create a new worker everytime like that?  Or just having 1 worker, and call async_some_method() when I need to do some long running task?  Is this where thread_pool come into place?

It really depends on nature of work you are doing within worker. If
task is IO bound and can run concurrently within thread pool without
stepping on each other's toe you can use that. However if your task is
CPU bound, ruby threads will be of no use and tasks will wait in queue
for execution within thread pool.

> 2. If I should create a new worker everytime, is there any reason why I shouldn't put the time-consuming task inside the worker's create() method?

By all means, yes you can!

> 3. At the Linux prompt, is there a way I can monitor how many workers are currently active?

Not at Linux prompt, but at ./script/console you can use
MiddleMan.all_worker_info which will give you a list of all currently
active workers.

> -----Original Message-----
> From: hemant [mailto:gethemant at gmail.com]
> Sent: Friday, February 27, 2009 12:18 AM
> To: Raghu Srinivasan
> Cc: Le, Tuong; backgroundrb-devel at rubyforge.org
> Subject: Re: [Backgroundrb-devel] When does a worker terminate
> On Fri, Feb 27, 2009 at 12:18 PM, Raghu Srinivasan
> <raghu.srinivasan at gmail.com> wrote:
>> Hemant  - I thought that script/background start starts all workers
>> and script/background stop stops all workers.
>> How does one explicitly close/exit a  particular worker from within Rails?
> You can call #delete on worker. For example:
> MiddleMan.worker("worker_name",<optional_worker_key>).delete
> Or you can call #exit from within the worker.

Let them talk of their oriental summer climes of everlasting
conservatories; give me the privilege of making my own summer with my
own coals.


More information about the Backgroundrb-devel mailing list