Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > [ANN] slave-0.2.0

Reply
Thread Tools

[ANN] slave-0.2.0

 
 
ara.t.howard@noaa.gov
Guest
Posts: n/a
 
      09-23-2006

SYNOPSIS

the Slave class forks a process and starts a drb server in the child using
any object as the server. the process is detached so it is not required
(nor possible) to wait on the child pid. a Heartbeat is set up between the
parent and child processes so that the child will exit of the parent exits
for any reason - preventing orphaned slaves from running indefinitely. the
purpose of Slaves is to be able to easily set up a collection of objects
communicating via drb protocols instead of having to use IPC.

typical usage:

obj = AnyClass::new

slave = Slave::new obj

p slave.object # handle on drb object
p slave.uri # uri of the drb object
p slave.socket # unix domain socket path for drb object
p slave.psname # title shown in ps/top

other usage:

set the pulse_rate used for the Heartbeat

slave = Slave::new MyClass::new, 'pulse_rate' => 10

same

Slave:ulse_rate = 10
slave = Slave::new MyClass::new

same

ENV['SLAVE_PULSE_RATE'] = 10
slave = Slave::new MyClass::new

to avoid having a copy of the object in both the parent and child use the
block form

slave = Slave::new{ Server::new } # copy only in child!
server = slave.object

if both an object AND a block are passed the object is passed to the block
in the child process

slave = Slave::new(Server::new){|server| p 'in child!' }

slaves may be configured via the environment, the Slave class, or via the
ctor for object itself. attributes which may be configured include

* socket_creation_attempts
* pulse_rate
* psname
* debug

HISTORY

0.2.0:
incorporated joel vanderWerf's patch such that, if no object is passed the
block is used to create one ONLY in the child. this avoids having a copy
in both parent and child is that needs to be avoided due to, for instance,
resource consumption.


0.0.1:
- patch from Logan Capaldo adds block form to slave new, block is run in the
child

- added a few more samples/*

- added Slave#wait

- added status information to slaves

- added close-on-exec flag to pipes in parent process

0.0.0:
- initial version


enjoy.

-a
--
in order to be effective truth must penetrate like an arrow - and that is
likely to hurt. -- wei wu wei

 
Reply With Quote
 
 
 
 
Ezra Zygmuntowicz
Guest
Posts: n/a
 
      09-24-2006

On Sep 23, 2006, at 3:52 PM, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:

>
> SYNOPSIS
>
> the Slave class forks a process and starts a drb server in the
> child using
> any object as the server. the process is detached so it is not
> required
> (nor possible) to wait on the child pid. a Heartbeat is set up
> between the
> parent and child processes so that the child will exit of the
> parent exits
> for any reason - preventing orphaned slaves from running
> indefinitely. the
> purpose of Slaves is to be able to easily set up a collection of
> objects
> communicating via drb protocols instead of having to use IPC.
>
> <snip>
>
> -a



This is a great library Ara, I am writing a library that wraps up
the slave lib into another interface for controlling jobs with timers
and a few other things. So the master process holds a thread pool
with references to slave classes in it so that you can set a limit on
the number of running slaves. Using it to offload jobs from a rails
app to not hold up the http flow. I have a question though. What
would be the cleanest way to have a slave class signal that it is
finished working and needs to be kill'ed. I know there is the
shutdown method that you could call from the master process to
shutdown a slave. But is there something similar that can be called
from a slave process? Or should I just let the slave process exit!
and let the heartbeat cleanup after the dead slaves?

Thanks
-Ezra

 
Reply With Quote
 
 
 
 
ara.t.howard@noaa.gov
Guest
Posts: n/a
 
      09-24-2006
On Sun, 24 Sep 2006, Ezra Zygmuntowicz wrote:

> This is a great library Ara, I am writing a library that wraps up the
> slave lib into another interface for controlling jobs with timers and
> a few other things. So the master process holds a thread pool with
> references to slave classes in it so that you can set a limit on the
> number of running slaves. Using it to offload jobs from a rails app to
> not hold up the http flow. I have a question though. What would be the
> cleanest way to have a slave class signal that it is finished working
> and needs to be kill'ed. I know there is the shutdown method that you
> could call from the master process to shutdown a slave. But is there
> something similar that can be called from a slave process? Or should I
> just let the slave process exit! and let the heartbeat cleanup after
> the dead slaves?


hmmm. good question. i could add a feature where at_exit handlers could be
added, somthing like


s = Slave.new( :at_exit => lambda{}){ do_child_stuff }


would that be sufficient?

-a
--
in order to be effective truth must penetrate like an arrow - and that is
likely to hurt. -- wei wu wei

 
Reply With Quote
 
Ezra Zygmuntowicz
Guest
Posts: n/a
 
      09-24-2006

On Sep 24, 2006, at 8:57 AM, (E-Mail Removed) wrote:

> On Sun, 24 Sep 2006, Ezra Zygmuntowicz wrote:
>
>> This is a great library Ara, I am writing a library that wraps up
>> the
>> slave lib into another interface for controlling jobs with timers
>> and
>> a few other things. So the master process holds a thread pool with
>> references to slave classes in it so that you can set a limit on the
>> number of running slaves. Using it to offload jobs from a rails
>> app to
>> not hold up the http flow. I have a question though. What would
>> be the
>> cleanest way to have a slave class signal that it is finished
>> working
>> and needs to be kill'ed. I know there is the shutdown method that
>> you
>> could call from the master process to shutdown a slave. But is there
>> something similar that can be called from a slave process? Or
>> should I
>> just let the slave process exit! and let the heartbeat cleanup after
>> the dead slaves?

>
> hmmm. good question. i could add a feature where at_exit handlers
> could be
> added, somthing like
>
>
> s = Slave.new( :at_exit => lambda{}){ do_child_stuff }
>
>
> would that be sufficient?
>
> -a



Ara-

Yeah that would work fine I think. So that would call the lambda
when the child process calls exit! ? Is there any way for a slave to
call back to the parent process? Or is there a way to get the drb uri
of the parent from the child?

Thanks for slave and all your other codeforpeople I have learned
a lot by reading through your code and by googling "cat a.rb"


Cheers-
-Ezra

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments