drb_fork

A

Ara.T.Howard

can anyone think of a more elegant way to do this:

~ > cat drb_fork.rb
require 'drb/drb'

def drb_fork obj
pipe = IO.pipe
fork do
pipe[0].close
pipe = pipe[1]
DRb.start_service nil, obj
pipe.write DRb.uri
pipe.close
DRb.thread.join
end
pipe[1].close
pipe = pipe[0]
uri = pipe.read
DRb.start_service nil, nil rescue nil
DRbObject.new nil, uri
end

a = drb_fork []
a << 42
p a.first


~ > ruby drb_fork.rb
42


??


thanks.

-a
--
===============================================================================
| EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE :: 303.497.6469
| A flower falls, even though we love it;
| and a weed grows, even though we do not love it.
| --Dogen
===============================================================================
 
J

Joel VanderWerf

Ara.T.Howard said:
can anyone think of a more elegant way to do this:

~ > cat drb_fork.rb
require 'drb/drb'

def drb_fork obj
pipe = IO.pipe
fork do
pipe[0].close
pipe = pipe[1]
DRb.start_service nil, obj
pipe.write DRb.uri
pipe.close
DRb.thread.join
end
pipe[1].close
pipe = pipe[0]
uri = pipe.read
DRb.start_service nil, nil rescue nil
DRbObject.new nil, uri
end

a = drb_fork []
a << 42
p a.first


~ > ruby drb_fork.rb
42

Maybe this:

http://raa.ruby-lang.org/project/detach/

I've never used it, but it looks interesting. (I suspect it does the
same as you do, though.)
 
A

Ara.T.Howard

Ara.T.Howard said:
can anyone think of a more elegant way to do this:

~ > cat drb_fork.rb
require 'drb/drb'

def drb_fork obj
pipe = IO.pipe
fork do
pipe[0].close
pipe = pipe[1]
DRb.start_service nil, obj
pipe.write DRb.uri
pipe.close
DRb.thread.join
end
pipe[1].close
pipe = pipe[0]
uri = pipe.read
DRb.start_service nil, nil rescue nil
DRbObject.new nil, uri
end

a = drb_fork []
a << 42
p a.first


~ > ruby drb_fork.rb
42

Maybe this:

http://raa.ruby-lang.org/project/detach/

I've never used it, but it looks interesting. (I suspect it does the
same as you do, though.)

it does look pretty nice - i didn't know about the drbunix:// uri style -
that's a nice trick since the code won't run w/o fork and there for should be
able to do this.

thanks for the pointer.

-a
--
===============================================================================
| EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE :: 303.497.6469
| A flower falls, even though we love it;
| and a weed grows, even though we do not love it.
| --Dogen
===============================================================================
 
E

Eric Hodel

--p1Od3smaOkJqivj4
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Ara.T.Howard ([email protected]) said:
can anyone think of a more elegant way to do this:
=20
~ > cat drb_fork.rb
require 'drb/drb'
=20
def drb_fork obj
pipe =3D IO.pipe
fork do
pipe[0].close
pipe =3D pipe[1]
DRb.start_service nil, obj
pipe.write DRb.uri
^^^^^^^^^^^^^^^^^^
I take it this is the important line you're looking for?
pipe.close
DRb.thread.join
end
pipe[1].close
pipe =3D pipe[0]
uri =3D pipe.read
DRb.start_service nil, nil rescue nil
DRbObject.new nil, uri
end
=20
a =3D drb_fork []
a << 42
p a.first

Use Rinda::RingServer:

http://segment7.net/projects/ruby/drb/rinda/ringserver.html

The description above is the most verbose way to perform service
discovery, since you get a DRb server running as a name service.
Instead you can just plug your front object into the RingServer, if you
only ever need one front.

--=20
Eric Hodel - (e-mail address removed) - http://segment7.net
All messages signed with fingerprint:
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04


--p1Od3smaOkJqivj4
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (FreeBSD)

iD8DBQFA9Y8FMypVHHlsnwQRAiQnAKDFgRrN84OnfQL5TOooC6XE6fFNRQCeOQXG
gC7Am/z8B0cShkR7FDNl/So=
=NfiZ
-----END PGP SIGNATURE-----

--p1Od3smaOkJqivj4--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

a __real__ drb question 3
drb question 1
memory leak from Hash#delete/fork/drb?? 2
tk tabbed pane 1
DRB Program Error 2
latest instiki err 2
openssl examples and docs 12
trying to get drb to work ... 0

Members online

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,165
Latest member
JavierBrak
Top