Ich versuche, die API-Aufrufe in meinem Code zu beschränken. Ich habe bereits eine nette Python-Bibliothek gefunden. ratelimiter==1.0.2.post0
https://pypi.python.org/pypi/ratelimiterPython-API-Ratenbegrenzung - Wie man API-Aufrufe global begrenzt
Diese Bibliothek kann jedoch nur die Rate im lokalen Bereich begrenzen. d.h) in Funktion und Schleifen
# Decorator
@RateLimiter(max_calls=10, period=1)
def do_something():
pass
# Context Manager
rate_limiter = RateLimiter(max_calls=10, period=1)
for i in range(100):
with rate_limiter:
do_something()
Weil ich mehrere Funktionen haben, die API-Anrufe zu tätigen, an verschiedenen Orten, ich die API-Aufrufe in globalen Umfang begrenzen wollen.
Angenommen, ich möchte den API-Aufruf auf einmal pro Sekunde beschränken. Und angenommen, ich habe die Funktionen x
und y
, in denen zwei API-Aufrufe gemacht werden.
@rate(...)
def x():
...
@rate(...)
def y():
...
Durch die Funktionen mit den limiter
dekorieren, ich bin in der Lage, die Rate gegen die beiden Funktionen zu begrenzen.
Wenn ich jedoch die obigen beiden Funktionen nacheinander ausführe, verliert es die Anzahl der API-Aufrufe in global Bereich, weil sie einander nicht bewusst sind. So wird y
direkt nach der Ausführung von x
aufgerufen, ohne eine weitere Sekunde zu warten. Und dies wird die Einmal pro Sekunde Einschränkung verletzen.
Gibt es eine Möglichkeit oder eine Bibliothek, die ich verwenden kann, um die Rate global in Python zu begrenzen?