I have a long running Ruby simulation in which data is stored to Ruby
hashes throughout the simulation. I'd like to be able to access the
hashes in memory from another Ruby script while the simulation is still
running to see what the progress of the simulation is (rather than
printing to the screen, using log4r, etc. Is this possible? If so, any
suggestions how to do so?
I have a long running Ruby simulation in which data is stored to Ruby
hashes throughout the simulation. I'd like to be able to access the
hashes in memory from another Ruby script while the simulation is still
running to see what the progress of the simulation is (rather than
printing to the screen, using log4r, etc. Is this possible? If so, any
suggestions how to do so?
Hello. I guess this is not possible, and even if it is, it is not a good
idea to do this. Probably a much better idea would be to start a TCP
server in the daemon, and connect to it from the other program, and
communicate using some simple protocol. Another idea could be to write
some progress info into a file, and open the file from the other
process, but then you'll have to handle some concurrency problems (not
very hard, I guess, it will be enough to wait a moment and retry on file
opening failure). But still I think the server is a better and more
standard way to do this. Have a look at TCPServer and TCPSocket in
'socket', it is not hard.
Please look into DRb. For pure status updates I would push the current state to the other process as opposed to pulling it because this does not need synchronization in the simulation. You can find a working toy example attached.
I have a long running Ruby simulation in which data is stored to Ruby
hashes throughout the simulation. I'd like to be able to access the
hashes in memory from another Ruby script while the simulation is still
running to see what the progress of the simulation is (rather than
printing to the screen, using log4r, etc. Is this possible? If so, any
suggestions how to do so?
I have a long running Ruby simulation in which data is stored to Ruby
hashes throughout the simulation. I'd like to be able to access the
hashes in memory from another Ruby script while the simulation is still
running to see what the progress of the simulation is (rather than
printing to the screen, using log4r, etc. Is this possible? If so, any
suggestions how to do so?
Hello. I guess this is not possible, and even if it is, it is not a good idea to do this. Probably a much better idea would be to start a TCP server in the daemon, and connect to it from the other program, and communicate using some simple protocol. Another idea could be to write some progress info into a file, and open the file from the other process, but then you'll have to handle some concurrency problems (not very hard, I guess, it will be enough to wait a moment and retry on file opening failure). But still I think the server is a better and more standard way to do this. Have a look at TCPServer and TCPSocket in 'socket', it is not hard.
DRb is the canonical way of doing this if both processes are ruby programs. For example:
== server.rb ==
require 'drb'
uri = "drbunix:/tmp/my-simulation.sock" # use "localhost:4444" on win
h = {1=>2, 3=>4}
DRb.start_service(uri, h)
DRb.thread.join
== client.rb ==
require 'drb'
uri = "drbunix:/tmp/my-simulation.sock" # use "localhost:4444" on win
DRb.start_service(nil, nil)
server_object = DRbObject.new(nil, uri)
p server_object.keys
server_object.each do |k, v|
p [k, v]
end
···
================
Output:
[1, 3]
[1, 2]
[3, 4]
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407