#ruby-on-rails #ruby #ruby-on-rails-3 #heroku
#ruby-on-rails #ruby #ruby-on-rails-3 #heroku
Вопрос:
Я создаю библиотеку, которую я буду запускать delayed_job в качестве фоновой службы на heroku.
Смысл метода lib будет заключаться в том, чтобы обращаться к API для обработки большого количества данных. API, к которому я обращаюсь, имеет ограничение в 600 запросов Graph API за 600 секунд.
При этом я хотел бы знать, можно ли было бы убедиться, что моя отложенная работа не будет проходить через это.
Что-то вроде:
requests_made = 0
@items.each do |x|
if request_made >= 600
pause for 1 second??????? Is this possible?
end
### HIT THE API
requests_made = requests_made 1
end
Возможно ли что-то подобное? Возможна ли приостановка? Отложенные задания Heroku будут выполняться до 4 часов, поэтому я не вижу проблемы с тайм-аутом. Мысли?
Ответ №1:
sleep(1)
вероятно, это самый явный и простой метод. Будет ли использование этого проблемой?
Добавлено в ответ на комментарий
Чтобы измерить время, затраченное на вызов API, выполните
start_time = Time.now
call_the_API
spent_time = Time.now - start_time
Затем вы можете выполнить некоторые условные обозначения на spent_time
.
Комментарии:
1. Я так не думаю? Я никогда раньше не использовал sleep
2. Есть какие-либо способы рассчитать время, поэтому определите, сколько времени требуется для выполнения вызова API, а затем вычтите это из 1… И если значение равно , то sleep?
3. @AnApprentice Я добавил, как измерить время, затраченное на API.
4. @AnApprentice, как только у вас это получится
spent_time
, посмотрите, так ли это> 1
. Если это так, то немедленно продолжайте, а не переходите в спящий режим. Кроме того,sleep()
принимает дробные значения, поэтому, еслиspent_time < 1
вы можетеsleep(1.0 - spent_time)
, сделайте паузу в коде менее секунды, что поможет вам не сбиться с пути. Если это не так важно, вы можете простоsleep(1)
всегда и вы сделаете чуть меньше 600.