cardinal_pythonlib.rate_limiting


Original code copyright (C) 2009-2022 Rudolf Cardinal (rudolf@pobox.com).

This file is part of cardinal_pythonlib.

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


Rate-limiting functions.

cardinal_pythonlib.rate_limiting.rate_limited(max_per_second: int | float | None) Callable[[Callable[[...], Any]], Callable[[...], Any]][source]

Returns a function that rate-limits another function to the specified frequency. Can be used as a decorator, e.g.

from cardinal_pythonlib.rate_limiting import rate_limited

@rate_limited(2)
def do_something_max_2hz():
    print("tick...")

for i in range(10):
    do_something_max_2hz()

or dynamically:

from cardinal_pythonlib.rate_limiting import rate_limited

def do_something():
    print("tick...")

limited = rate_limited(2)(do_something)
for i in range(10):
    limited()
Parameters:

max_per_second – maximum number of calls per second to permit, or None for no limit

Returns:

a function that takes a function argument

Based on https://www.gregburek.com/2011/12/05/rate-limiting-with-decorators/, with minor modifications.