Skip to main content

Throttler for asyncio Python

Project description

aiothrottler CircleCI Test Coverage

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiothrottler-0.0.16.tar.gz (2.4 kB view details)

Uploaded Source

Built Distribution

aiothrottler-0.0.16-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

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

Hashes for aiothrottler-0.0.16.tar.gz
Algorithm Hash digest
SHA256 ab5572d88ffc4b985068439f6f64677f3f7013fbf1afcd32a4196570aad2e7c1
MD5 8d3df7e165d78a24a0faeac7bd5117cb
BLAKE2b-256 f0d85af5483010313a0671956d2f0b634b8f02a7b03b7c3c96a2842cd462f0c5

See more details on using hashes here.

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

Hashes for aiothrottler-0.0.16-py3-none-any.whl
Algorithm Hash digest
SHA256 f5f4c42c023c7f19619bd9331144ab060f34836be195b92e9281172345a294d7
MD5 3b2f3d7143cdf66c9fe9f28ca9ac6155
BLAKE2b-256 a72d81f6a068085d25c392ed485fda4d8579ee3052c24e0ec47fc6cbb09d3a59

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page