2017-02-21 3 views
1

Ich verwendePython Schlaf, wenn 10 Anfragen machen

requests.get() 

den gleichen Server immer wieder anzurufen, aber ich bin zu 30 Anfragen pro Minute begrenzt. Wie kann ich das Programm für eine Minute schlafen lassen, wenn ich 30 Anfragen stelle? Die Herausforderung ist

sind überall in meinem Code verteilt, kann ich sie nicht in eine Schleife setzen

+0

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

Antwort

0

Sie könnten die Adapter Pattern verwenden, um die Anforderungen zu verpacken. So etwas wie das:

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) 

Je nach Ihren Anforderungen, möchten Sie vielleicht etwas davon ändern. Zum Beispiel, wie es codiert ist, wird Ihre Anzahl erhöht, unabhängig davon, ob Ihr get erfolgreich ist oder fehlschlägt. Das kann oder darf nicht sein, was Sie wollen. Wenn Sie sich entscheiden, eine globale Instanz dieser Klasse zu erstellen, müssen Sie sich Gedanken über den gleichzeitigen Zugriff auf die Variable count machen (wenn Sie die Parallelität verwenden).

+0

Während Ihr Code die Anzahl der Anfragen auf 30 beschränkt, bevor er schläft, ist das nicht dasselbe wie nur bis zu 30 _per Minute_ erlaubt. Ich glaube, es braucht einen gewissen Sinn für das Intervall zwischen den Anforderungen, die gestellt werden, um wirklich zu tun, was das OP braucht. – martineau

+0

@martineau, OPs ursprüngliche Frage fragte, wie man für eine Minute nach 30 Anfragen schlafe. Ich habe diesen Code als einfachste Möglichkeit veröffentlicht. Ich stimme jedoch zu, dass es nicht der effizienteste Weg ist, die Anfragen zu begrenzen. Ich werde versuchen, heute Nacht eine andere Antwort zu veröffentlichen, wenn ich Zeit habe. – Ben

+0

Ich wollte nicht, dass Ihr Rechner nicht effizient ist, sondern dass er die Anzahl der Anfragen pro Minute berechnen muss, um wirklich das zu tun, was das OP getan haben will. Darüber hinaus muss es möglicherweise überprüfen, ob die gleiche Anfrage gestellt wird oder nicht und entsprechend anpassen oder zurücksetzen. – martineau