⏲️ Rate-limiting, thread-safe and asynchronous decorators + context managers that implement the token-bucket algorithm.
Project description
limiter
Rate-limiting thread-safe and asynchronous decorators and context managers that implement the token-bucket algorithm.
- Thread-safe, with no need for a timer thread
- Control burst requests
- Control average request rate
- Easy to use
Installation
Requirements
- Python 3.7+
Installing from PyPI
pip3 install limiter
Usage
from asyncio import sleep as aiosleep
from time import sleep as tsleep
from limiter import get_limiter, limit
REFRESH_RATE = 2
BURST_RATE = 3
limiter = get_limiter(rate=REFRESH_RATE, capacity=BURST_RATE)
@limit(limiter)
def get_page(url: str) -> Response:
tsleep(1)
@limit(limiter, consume=2)
async def do_stuff():
await aiosleep(1)
def do_stuff():
# do stuff
with limit(limiter, consume=1.5):
# do expensive stuff
pass
async def do_stuff():
# do stuff
async with limit(limiter):
# do expensive stuff
pass
@limit(limiter, bucket=b'other stuff')
def do_other_stuff():
pass
License
See LICENSE
. If you'd like to use this project with a different license, please get in touch.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
limiter-0.1.2.tar.gz
(15.0 kB
view hashes)
Built Distribution
Close
Hashes for limiter-0.1.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41f1ae4fa3a1f1d910c171939d166a90e63c6fff49c4b0aeb9db993f14b9cc4a |
|
MD5 | 252bd256ad5cfee670e6f6f2cc2c104c |
|
BLAKE2b-256 | baa93f4e4b38f67c6bcfb4365b61e8ff576252b7219845b47d271ac0b2db26e2 |