2017-02-21 16 views
1

Я используюPython сна, делая 10 запросов

requests.get() 

называть один и тот же сервер снова и снова, но я ограничен до 30 запросов в минуту. Как я могу заставить программу спать в течение минуты, когда я делаю 30 запросов. Возникает проблема:

requests.get() 
+0

'time.sleep (60)' ... –

ответ

0

Чтобы обернуть запросы, вы можете использовать Adapter Pattern. Что-то вроде этого:

class RequestLimiter: 
    def __init__(self): 
     self.count = 0 
    def get(self, *args, **kwargs): 
     if self.count == 30: 
      time.sleep(60) 
      self.count = 0 
      return requests.get(*args, **kwargs) 
     else: 
      self.count += 1 
      requests.get(*args, **kwargs) 

def main(): 
    # If this is through your whole program, 
    # you might want to make this global- be careful with that! 
    r = RequestLimiter() 
    r.get(url, args) 

В зависимости от ваших требований вы можете изменить часть этого. Например, поскольку он закодирован, ваш счет будет увеличиваться независимо от того, будет ли ваш get успешным или неудачным. Это может быть или не быть тем, что вы хотите. Если вы решите создать глобальный экземпляр этого класса, вам придется беспокоиться о параллельном доступе к переменной count (если вы используете параллелизм).

+0

Пока ваш код ограничивает количество запросов до 30 перед сном, это не то же самое, что разрешить только до 30 _per minute_. Я считаю, что это требует некоторого понимания интервала между запросами, сделанными для того, чтобы действительно делать то, что требуется OP. – martineau

+0

@martineau, исходный вопрос OP действительно спрашивал, как спать в течение минуты после каждых 30 запросов. Я опубликовал этот код как самый простой способ сделать это. Я согласен, однако, что это не самый эффективный с точки зрения времени способ ограничения запросов. Я попытаюсь опубликовать еще один ответ сегодня, используя ваш метод интервалов, если у меня будет время. – Ben

+0

Я не имел в виду, что ваша способность не была эффективной, просто нужно вычислить количество запросов в минуту, чтобы действительно сделать то, что хочет сделать OP. Кроме того, может потребоваться также проверить, выполняется ли тот же запрос или нет, и соответственно отрегулировать или сбросить. – martineau