Регулирующая / ограничивающая скорость рубиновая механизация - PullRequest
5 голосов
/ 11 февраля 2012

Мне нужно отрегулировать, как часто экземпляр Mechanize соединяется с API (один раз каждые 2 секунды, поэтому ограничьте количество подключений этим или более)

Так вот:

instance.pre_connect_hooks << Proc.new { sleep 2 }

У меня былоЯ думал, что это сработает, и это вроде как делает НО, но теперь каждый метод в этом классе спит в течение 2 секунд, как если бы к механизированному экземпляру дотронулись и сказали держать 2 секунды.Я собираюсь попробовать хук пост-коннекта, но очевидно, что мне нужно что-то более сложное, но то, что я не знаю, что на данный момент.

Код является более подробным объяснением, так что если вам интереснодалее: https://github.com/blueblank/reddit_modbot, в противном случае мой вопрос касается того, как эффективно и действенно ограничить ограничение экземпляра Mechanize в пределах определенного периода времени, определенного API (где превышение этого ограничения приводит к отброшенным запросам и запретам).Кроме того, я предполагаю, что мне нужно лучше интегрировать экземпляр механизации в мой класс, и любые указатели на это также приветствуются.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Перехваты до и после соединения вызываются при каждом соединении, поэтому при некотором перенаправлении он может срабатывать много раз за один запрос. Попробуйте history_added, который вызывается только один раз:

instance.history_added = Proc.new {sleep 2}
1 голос
/ 09 мая 2012

Я использую SlowWeb , чтобы ограничить количество звонков на определенный URL.

require 'slowweb'
SlowWeb.limit('example.com', 10, 60)

В этом случае звонки на домен example.com ограничиваются 10 запросами каждые 60 секунд.

...