Skip to main content

RateLimiter

PyPI Version Build Status Python Version License

Simple Python module providing rate limiting.

Overview

This package provides the ratelimiter module, which ensures that an operation will not be executed more than a given number of times on a given period. This can prove useful when working with third parties APIs which require for example a maximum of 10 requests per second.

Usage

Decorator

from ratelimiter import RateLimiter

@RateLimiter(max_calls=10, period=1)
def do_something():
    pass

Context Manager

from ratelimiter import RateLimiter

rate_limiter = RateLimiter(max_calls=10, period=1)

for i in range(100):
    with rate_limiter:
        do_something()

Callback

The callback is called in its own thread, so your callback may use sleep without delaying the rate limiter.

import time

from ratelimiter import RateLimiter

def limited(until):
    duration = int(round(until - time.time()))
    print('Rate limited, sleeping for {:d} seconds'.format(duration))

rate_limiter = RateLimiter(max_calls=2, period=3, callback=limited)

for i in range(3):
    with rate_limiter:
        print('Iteration', i)

Output:

Iteration 0
Iteration 1
Rate limited, sleeping for 3 seconds
Iteration 2

asyncio

The RateLimiter object can be used in an async with statement on Python 3.5+. Note that the callback must be a coroutine in this context. The coroutine callback is not called in a separate thread.

import asyncio
import time

from ratelimiter import RateLimiter

async def limited(until):
    duration = int(round(until - time.time()))
    print('Rate limited, sleeping for {:d} seconds'.format(duration))

async def coro():
    rate_limiter = RateLimiter(max_calls=2, period=3, callback=limited)
    for i in range(3):
        async with rate_limiter:
            print('Iteration', i)

loop = asyncio.get_event_loop()
loop.run_until_complete(coro())

License

Original work Copyright 2013 Arnaud Porterie
Modified work Copyright 2016 Frazer McLean

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

http://www.apache.org/licenses/LICENSE-2.0

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.

Release files for ratelimiter 1.2.0.post0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ratelimiter 1.2.0.post0
File Size Uploaded
ratelimiter-1.2.0.post0.tar.gz 9.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ratelimiter 1.2.0.post0
File Interpreter ABI Platform
ratelimiter-1.2.0.post0-py3-none-any.whl Python 3 none any Details

Total release size: 15.8 kB

Release files / ratelimiter-1.2.0.post0.tar.gz

Download URL ratelimiter-1.2.0.post0.tar.gz
Size 9.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7
BLAKE2b-256 checksum
How to use checksums
5be0b36010bddcf91444ff51179c076e4a09c513674a56758d7cfea4f6520e29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / ratelimiter-1.2.0.post0-py3-none-any.whl

Download URL ratelimiter-1.2.0.post0-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f
BLAKE2b-256 checksum
How to use checksums
51802164fa1e863ad52cc8d870855fba0fbb51edd943edffd516d54b5f6f8ff8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.2.0.post0 This release

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.3.0

0.2.4

2 release files

0.2.3

1 release file

0.2.2

1 release file

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page