Catalog PyPI
Back to packageRELEASE DETAILS

3.2.2

PyPI

aiodecorator

Binance Python SDK

Published11 Dec 2025
Direct dependencies10
Transitive dependenciesNot calculated

README

Version 3.2.2 documentation

aiodecorator

Python decorators for asyncio, including

  • timeout: Set the timeout for a function
  • throttle: Throttle a (coroutine) function that return an Awaitable
  • repeat: Repeat a function
  • schedule_naturally: Schedule a function to run from the next time moment

Install

$ pip install aiodecorator

Usage

import time
import asyncio

from aiodecorator import (
    throttle
)


async def run(throttle_type):
    now = time.time()

    # -----------------------------------------------------
    # The throttled function is only called twice a second
    @throttle(2, 1, throttle_type)
    async def throttled(index: int):
        await asyncio.sleep(0.1)
        diff = format(time.time() - now, '.0f')
        print(index, f'{diff}s')
    # -----------------------------------------------------

    loop = asyncio.get_running_loop()
    tasks = [
        loop.create_task(throttled(index))
        for index in range(5)
    ]

    await asyncio.wait(tasks)


asyncio.run(run('wait'))

# Output: queued
# 0 0s
# 1 0s
# 2 1s
# 3 1s
# 4 2s

asyncio.run(run('ignore'))

# Output: 2, 3, 4 are ignored
# 0 0s
# 1 0s


asyncio.run(run('replace'))

# Output: 1, 2, 3 are canceled
# 0 0s
# 4 0s

APIs

throttle(limit: int, interval: Union[float, int], throttle_type)

  • limit int Maximum number of calls within an interval.
  • interval Union[int, float] Timespan for limit in seconds.
  • throttle_type Literal['ignore', 'wait', 'replace'] = 'ignore'
    • 'ignore': ignore the function call and return None if it exceeds the limit.
    • 'wait': wait for the next tick to execute the function.
    • 'replace': try to cancel the last function call, let it return None and execute the current function call. (New in 3.1.0)

Returns a decorator function

schedule_naturally(unit, delay, weekday)

  • unit Literal['secondly', 'minutely', 'hourly', 'daily', 'weekly', 'monthly', 'yearly']
  • delay timedelta = timedelta(seconds=0)
  • weekday Weekday only used when unit is 'weekly'

Returns a decorator function that schedule a function fn to run from the next time moment with a delay delay

For example:

@schedule_natually('daily', delay = timedelta(seconds=50))
async def run():
    print('hello')

await run()

# It will print 'hello' at 00:00:50 in the next day
@repeat(-1)
@schedule_naturally(
    'weekly',
    delay = timedelta(minutes=5),
    weekday = 'Wednesday'
)
async def run_weekly():
    print('hello')

await run_weekly()

# It will print 'hello' at 00:05 every Wednesday

repeat(times: int, interval: float = 0.)

  • times int the number of times to repeat the function
  • interval float = 0. the interval between each call
@repeat(7)
@schedule_naturally('daily')
@repeat(3, 0.1)
async def run()
    print('hello')

await run()

# It will schedule a one-week plan, at 00:00:00 each day, it prints "hello" three times, with 100 ms between each print.

timeout(seconds: int | None, at: float | None)

New in 3.1.0

  • seconds int | None = None seconds to time out. If seconds <= 0 or seconds is None, there will be no timeout.
  • at (float | None = None): deadline to timeout, at has higher priority than seconds

Make the function automatically cancel itself if it takes longer than seconds seconds.

@timeout(1)
async def my_function():
    await asyncio.sleep(2)

try:
    await my_function():
except asyncio.TimeoutError:
    print('timeout')

# It will print 'timeout'

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 10

Native requirements
10 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
codecov
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
codecov; extra == "dev"runtime
coverage
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
coverage; extra == "dev"runtime
ruff
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
ruff; extra == "dev"runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
pytest; extra == "dev"runtime
pytest-asyncio
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
pytest-asyncio; extra == "dev"runtime
pytest-cov
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
pytest-cov; extra == "dev"runtime
twine
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
twine; extra == "dev"runtime
setuptools
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
setuptools; extra == "dev"runtime
mypy
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
mypy; extra == "dev"runtime
build
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.6",
  "evaluation": "NOT_EVALUATED"
}
build; extra == "dev"runtime

Distribution files

2 collected
aiodecorator-3.2.2-py3-none-any.whl

bdist_wheel · 8.66 KB · Python py3

Source file
aiodecorator-3.2.2.tar.gz

sdist · 10.18 KB · Python source

Source file

Repository

ACCESSIBLE
kaelzhang/python-aiodecorator

Shared repository data · GitHub

License detected in repository
MIT
License branch / ref
master
Last push
11 Dec 2025
Archived
No
Contributor identities
— · partial collection

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

0count
Gauge · observed snapshots23 Oct 2026
10.50
2026-10-23: 0 · observed 2026-10-23T22:31:26.0704803Z
23 Oct23 Oct

github · 1 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2302026-10-23T22:31:26.0704803Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 11:48 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:8d4e597b60b72887f4ffc1238cae8dafc9476ec3d941d314ca40cbfd9d26b5d5

Other collected versions

View all collected versions →