Binance Python SDK
Project description
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
intMaximum number of calls within aninterval. - interval
Union[int, float]Timespan for limit in seconds. - throttle_type
Literal['ignore', 'wait', 'replace'] = 'ignore'- 'ignore': ignore the function call and return
Noneif 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
Noneand execute the current function call. (New in3.1.0)
- 'ignore': ignore the function call and return
Returns a decorator function
schedule_naturally(unit, delay, weekday)
- unit
Literal['secondly', 'minutely', 'hourly', 'daily', 'weekly', 'monthly', 'yearly'] - delay
timedelta = timedelta(seconds=0) - weekday
Weekdayonly used whenunitis'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
intthe 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 = Noneseconds to time out. Ifseconds <= 0orsecondsisNone, there will be no timeout. - at (float | None = None): deadline to timeout,
athas higher priority thanseconds
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
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aiodecorator-3.2.2.tar.gz.
File metadata
- Download URL: aiodecorator-3.2.2.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb4696d266ea3ceb783f9dbcc599e04ac9803f9569adbebe28bd3163d42278dc
|
|
| MD5 |
a1e61e7e626aa8b8c88de5de5ca65daa
|
|
| BLAKE2b-256 |
10ae52b5b62584e3bca9c119c026a4ef15b29d6ce909db6c3568cccf5cfab2f6
|
File details
Details for the file aiodecorator-3.2.2-py3-none-any.whl.
File metadata
- Download URL: aiodecorator-3.2.2-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8b8cdc46565450b50df1267fd33e7f7f8d7701b0e023b38969451087fe2614e
|
|
| MD5 |
e266e182e6ad2e771181ff0a78e84c2e
|
|
| BLAKE2b-256 |
d3100f59b8bd07b9de8fc43aa320b7766d49043b46f250445b4629a9b143339b
|