EventMachine — как понять, что вы отстаете?

Я изучаю возможность использования rubygem twitter-stream на базе EventMachine для отслеживания и захвата твитов. Я новичок во всем, что касается событийного программирования. Как я могу определить, не приводит ли какая-либо обработка, которую я выполняю в своем цикле событий, к отставанию? Есть ли простой способ проверить?


person makenai    schedule 02.02.2011    source источник
comment
Было бы очень полезно, если бы вы предоставили сжатый образец вашего кода, показывающий, что вы пробовали.   -  person the Tin Man    schedule 02.02.2011


Ответы (2)


EventMachine имеет метод EventMachine::Queue.size, который позволяет просмотреть текущую очередь и понять, насколько она велика.

Вы можете add_periodic_timer() и в этом случае получить размер очереди и распечатать ее.

Если число не становится меньше, вы находитесь в паритете. Если он идет вверх, вы отстаете.

person the Tin Man    schedule 02.02.2011
comment
Именно то, что мне было нужно. Благодарю вас! - person makenai; 03.02.2011
comment
Похоже, размер не является методом класса, поэтому вы не можете вызвать его, как здесь написано? EventMachine::Queue.size Это только для пользовательских очередей (экземпляр этого класса) или его можно использовать для получения размера очереди основного реактора? Я новичок в EventMachine, поэтому спасибо за помощь. - person Brian Armstrong; 27.12.2011
comment
Этот метод предназначен для пользовательских очередей, а не для основной очереди реактора. На самом деле нет способа получить точное количество см. (группы. google.com/forum/?fromgroups#!topic/eventmachine/). Получение задержки часто является хорошей альтернативой, см. ответ dj2. - person trcarden; 04.08.2012

Вы можете определить задержку, используя периодический таймер и распечатав прошедшее время. Если вы используете таймер на 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 
person dj2    schedule 06.02.2011