【问题标题】:EventMachine - how can you tell if you're falling behind?EventMachine - 你怎么知道你是否落后了?
【发布时间】:2011-02-02 06:37:52
【问题描述】:

我正在研究使用 EventMachine 驱动的 twitter-stream ruby​​gem 来跟踪和捕获推文。我对整个事件编程的事情有点陌生。如何判断我在事件循环中所做的任何处理是否导致我落后?有没有简单的检查方法?

【问题讨论】:

  • 如果您能提供一个精简的代码示例来展示您所尝试的内容,这将非常有帮助。

标签: ruby twitter eventmachine


【解决方案1】:

您可以通过使用周期性计时器并打印出经过的时间来确定延迟。如果你使用 1 秒的计时器,你应该已经过去了大约 1 秒,如果它更大,你就会知道你在减慢反应堆的速度。

@last = Time.now.to_f
EM.add_periodic_timer(1) do
  puts "LATENCY: #{Time.now.to_f - @last}"
  @last = Time.now.to_f
end 

【讨论】:

    【解决方案2】:

    EventMachine 有一个EventMachine::Queue.size 方法,可以让您查看当前队列并了解它有多大。

    您可以add_periodic_timer(),在这种情况下,获取队列的大小并打印出来。

    如果这个数字没有变小,你就处于平价状态。如果它在上升,你就落后了。

    【讨论】:

    • 正是我需要的。谢谢!
    • 看起来 size 不是类方法所以不能像这里写的那样调用它? EventMachine::Queue.size这只是用于自定义队列(该类的一个实例),还是可以用来获取主反应器的队列大小?我是 EventMachine 的新手,所以感谢您的帮助。
    • 此方法适用于自定义队列而不是主反应器队列。事实上,没有办法获得确切的计数,请参阅 (groups.google.com/forum/?fromgroups#!topic/eventmachine/…)。获得延迟通常是一个不错的选择,请参阅 dj2 的回答
    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2015-05-14
    • 2011-11-05
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多