Simple, easy-to-use throttler for asyncio
Project description
asyncio-throttle
Simple, easy-to-use throttler for asyncio.
Example
import time
import random
import asyncio
from asyncio_throttle import Throttler
async def worker(no, throttler, n):
for _ in range(n):
await asyncio.sleep(random.random() * 2)
async with throttler:
print(time.time(), 'Worker #%d: Bang!' % no)
async def main():
throttler = Throttler(rate_limit=5)
tasks = [
loop.create_task(worker(no, throttler, 10))
for no in range(5)
]
await asyncio.wait(tasks)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Here I limited work rate to 5/sec while there are 5 workers. And the result:
1508273760.3462772 Worker #2: Bang!
1508273760.590009 Worker #3: Bang!
1508273760.856431 Worker #0: Bang!
1508273761.0110679 Worker #2: Bang!
1508273761.086856 Worker #4: Bang!
1508273761.350699 Worker #3: Bang!
1508273761.5906 Worker #1: Bang!
1508273761.8655958 Worker #4: Bang!
1508273762.224158 Worker #0: Bang!
1508273762.600234 Worker #2: Bang!
1508273762.694332 Worker #2: Bang!
1508273762.726774 Worker #0: Bang!
1508273762.944273 Worker #4: Bang!
Installation
$ pip install asyncio-throttle
It requires Python 3.6 or later.
Usage
asyncio_throttle.Throttler
introduces simple APIs: flush()
and
acquire()
. But you will not be interested in those because you can
just use it within with
statement and it looks nicer.
First, create a throttler given desired rate limit. For example if you want to limit rate to 500/min, you can make it as:
from asyncio_throttle import Throttler
throttler = Throttler(rate_limit=500, period=60)
Then whenever you want to do some jobs which should have limited
rate(e.g. sending request to server), Put it in async with
statement:
async with throttler:
send_a_request()
It's that easy. asyncio_throttler
can be easily integrated with
aiohttp
too:
async def worker(throttler, session):
while True:
async with throttler:
async with session.get('http://example.com') as resp:
do_some_job_with(await resp.text())
await asyncio.sleep(0.05)
Project details
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 asyncio-throttle-1.0.2.tar.gz
.
File metadata
- Download URL: asyncio-throttle-1.0.2.tar.gz
- Upload date:
- Size: 3.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2675282e99d9129ecc446f917e174bc205c65e36c602aa18603b4948567fcbd4 |
|
MD5 | 831534e16334514cdbd1b729b6bbba93 |
|
BLAKE2b-256 | 136f0e2d42c0e95d50edf63147b8a742703061945e02760f25d6a0e8f028ccb0 |
File details
Details for the file asyncio_throttle-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: asyncio_throttle-1.0.2-py3-none-any.whl
- Upload date:
- Size: 4.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d4c1eb3250f735f59ce842d8d92cd2927c008bd52008797ba030b5787c41f3b |
|
MD5 | e770314e733bded65133705a4adb00dd |
|
BLAKE2b-256 | f66ad18c93722fb56dc1ffed5fb7e7fcff4f8031f80f84c5cc0427363a036b0c |