Механизируйте крючки до/после соединения

Используя Mechanize, мне нужно найти какой-то способ ограничить запросы до 1 в секунду (или 1 каждые 5 секунд, или 2 каждую минуту и ​​т. Д., Суть в том, чтобы найти способ ограничить запросы).

Поиск, это, кажется, способ начать подходить к проблеме: ловушки pre/post connect. Только я точно не знаю, что с ними делать или как подступиться, я предполагаю, исходя из своего уровня и исследований, что мне нужно сделать лямбду или процедуру, которая говорит: «Эй, подожди секунду», кажется достаточно простым.

Мой вопрос в основном для примера или другой подсказки о том, как это сделать. Я попробовал несколько лямбд (и я плохо понимаю, что именно это будет делать):

@agent.pre_connect_hooks << lambda { |pc| sleep 1 }

но это просто превращает мои запросы в ошибки:

ArgumentError: wrong number of arguments (2 for 0)

Даже начало прохождения механизированного кода мне пока мало что дает.

Любой вклад и руководство по обучению приветствуются.


person blueblank    schedule 09.02.2012    source источник


Ответы (3)


Вместо этого используйте Proc :

@agent.pre_connect_hooks << Proc.new { sleep 1 }

person Kassym Dorsel    schedule 09.02.2012
comment
Да, это работает, не знаю, почему я застрял на лямбде, но это простое начало. - person blueblank; 10.02.2012

Вашей лямбде нужны 2 аргумента:

agent.pre_connect_hooks << lambda do |agent, request|
  sleep 1
end
person Venkat D.    schedule 14.05.2012

Вы также можете передать Method:

def my_pre_hook(agent, request)
  # Do fun stuff.
end

agent.pre_connect_hooks << method(:my_pre_hook)
person Richard Michael    schedule 30.05.2012