开发者

What is the best way to periodically export a counter from a loop in Ruby

I have created a daemon in Ruby w开发者_开发知识库hich has a counter incrementing inside of a loop. The loop does its business, then sleeps for 1 second, then continues. Simplified it's something like:

loop do
  response = send_command
  if response == 1
    counter += 1
  end
  sleep(1)
end

Every 5 minutes I would like to call a method to database the counter value. I figure there are a few ways to do this. The initial way I considered was calling Time.now in the loop, examining it to match 5 minutes, 0 seconds, and if that matched, call the sql function. That seems terribly inefficient, however, and it could also miss a record if send_command took some time.

Another possibility may be to make available the counter variable, which could be called (and reset) via a socket. I briefly took a look at the Socket class, and that seems possible.

Is there an obvious/best way to do this that I'm missing?


If you just want to save every 5 minutes, you could just use a Thread. Something like:

Thread.new do
    save_value_in_the_db(counter)
    sleep 5*60
end

Note that the thread have access to counter if it is defined in the same block as the loop. you could also use an object and have the @counter declared insidd.

If you prefer to access remotely, you can do it with a socket or use a drb approach, that is probably easier. This drb tutorial seem to fit your requirements: http://ruby.about.com/od/advancedruby/a/drb.htm


I'd have the counter be updated every time through the loop, then periodically have something read that and update the database.

That makes a simpler main loop because it doesn't have to pay attention to how long it's needed to wait before exporting the value.

And, it's very common and normal to have a periodic task that samples a value and does something with it.

Creating a simple socket would work well. Ruby's Socket code RDoc has some samples for echo servers that might get you started.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜