Throttler for asyncio Python
Project description
aiothrottler
Throttler for asyncio Python
Installation
pip install aiothrottler
Usage
Create a shared Throttler
, passing a minimum interval, e.g. 0.5
seconds
from aiothrottler import Throttler
throttler = Throttler(min_interval=0.5)
and then just before the piece(s) of code to be throttled, call this and await
its result.
await throttler()
# There will be a gap of at least 0.5 seconds
# between executions reaching this line
Example: multiple tasks throttled
import asyncio
import time
from aiothrottler import Throttler
async def main():
throttler = Throttler(min_interval=0.5)
await asyncio.gather(*[
worker(throttler) for _ in range(10)
])
async def worker(throttler):
await throttler()
# Interval of at least 0.5 seconds between prints
# even though all workers started together
print(time.time())
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Example: single task throttled/smoothed
import asyncio
import random
import time
from aiothrottler import Throttler
async def main():
throttler = Throttler(min_interval=0.5)
for _ in range(10):
await throttler()
# Interval of at least 0.5 seconds between prints
# even though each sleep is random
print(time.time())
await asyncio.sleep(random.random())
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Differences to alternatives
-
The API features a function to call to
await
its result [some use a context manager] -
The API is imperative [some use a functional approach/higher-order function]
-
No polling is used [some use polling internally]
-
A minimum interval between resolutions is used to throttle [rather that a max resolutions per time interval, which can cause an irregular pattern of resolutions]
-
The tests cover edge cases, such as asserting on throttling after tasks being throttled have been cancelled [some alternatives do not]
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
Built Distribution
File details
Details for the file aiothrottler-0.0.16.tar.gz
.
File metadata
- Download URL: aiothrottler-0.0.16.tar.gz
- Upload date:
- Size: 2.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab5572d88ffc4b985068439f6f64677f3f7013fbf1afcd32a4196570aad2e7c1 |
|
MD5 | 8d3df7e165d78a24a0faeac7bd5117cb |
|
BLAKE2b-256 | f0d85af5483010313a0671956d2f0b634b8f02a7b03b7c3c96a2842cd462f0c5 |
File details
Details for the file aiothrottler-0.0.16-py3-none-any.whl
.
File metadata
- Download URL: aiothrottler-0.0.16-py3-none-any.whl
- Upload date:
- Size: 3.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5f4c42c023c7f19619bd9331144ab060f34836be195b92e9281172345a294d7 |
|
MD5 | 3b2f3d7143cdf66c9fe9f28ca9ac6155 |
|
BLAKE2b-256 | a72d81f6a068085d25c392ed485fda4d8579ee3052c24e0ec47fc6cbb09d3a59 |