Wie begrenzen Sie die Rate der Anfragen an Webdienste in Python?

Ich arbeite an einer Python-Bibliothek, die mit einer Webdienst-API verbunden ist. Wie bei vielen Webdiensten, auf die ich gestoßen bin, beschränkt dieser die Anzahl der Anfragen. Ich möchte einen optionalen Parameter angeben,limit an die Klasseninstanziierung, die, sofern angegeben, ausgehende Anforderungen hält, bis die angegebene Anzahl von Sekunden verstrichen ist.

Ich verstehe, dass das allgemeine Szenario das folgende ist: Eine Instanz der Klasse sendet eine Anforderung über eine Methode. Wenn dies der Fall ist, gibt die Methode ein Signal aus, das irgendwo eine Sperrvariable setzt, und startet einen Countdown-Timer für die Anzahl der Sekunden in limit. (Höchstwahrscheinlich ist die Sperre der Countdown-Timer selbst.) Wenn innerhalb dieses Zeitrahmens eine weitere Anforderung gestellt wird, muss sie in die Warteschlange gestellt werden, bis der Countdown-Timer Null erreicht und die Sperre deaktiviert ist. Zu diesem Zeitpunkt wird die älteste Anforderung in der Warteschlange gesendet, und der Countdown-Timer wird zurückgesetzt und die Sperre wieder aktiviert.

Ist dies ein Fall für das Einfädeln? Gibt es einen anderen Ansatz, den ich nicht sehe?

Sollen der Countdown-Timer und die Sperre Instanzvariablen sein oder sollten sie zur Klasse gehören, sodass alle Instanzen der Klasse Anforderungen zurückhalten?

Auch, ist dies im Allgemeinen eine schlechte Idee, um in einer Bibliothek ratenbegrenzende Funktionen bereitzustellen? Da der Countdown standardmäßig null Sekunden beträgt, ermöglicht die Bibliothek Entwicklern weiterhin, die Bibliothek zu verwenden und ihre eigenen ratenbegrenzenden Schemata bereitzustellen. Angesichts der Tatsache, dass Entwickler, die den Service nutzen, ohnehin Anforderungen zur Begrenzung der Rate benötigen, ist es meiner Ansicht nach für die Bibliothek von Vorteil, eine Möglichkeit zur Begrenzung der Rate bereitzustellen.

Unabhängig davon, ob ein System zur Begrenzung der Geschwindigkeit in der Bibliothek abgelegt wird oder nicht, möchte ich eine Anwendung mithilfe der Bibliothek schreiben. Daher sind vorgeschlagene Techniken hilfreich.

Vielen Dank für Ihre Vorschläge!

Chris

Antworten auf die Frage(12)

Ihre Antwort auf die Frage