quantpylib.throttler.decorators
Examples for both decorator usage, and synchronous, asynchronous semaphores are given here.
aconsume_credits(_func=None, *, costs, refund_in, attrname='rate_semaphore', timeout=0, verbose=False)
Decorator to wrap an asynchronous instance-level coroutine as an asynchronous transaction within a rate-limited semaphore. The return value is the return value of the decorated coroutine.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
_func |
coroutine
|
The asynchronous coroutine to be wrapped. |
None
|
costs |
float
|
The number of credits required for the transaction. |
required |
refund_in |
float
|
The time in seconds after which the credits should be refunded. |
required |
attrname |
str
|
The attribute name to access the AsyncRateSemaphore belonging to the object instance. Defaults to "rate_semaphore". |
'rate_semaphore'
|
timeout |
float
|
The maximum time in seconds to wait for the transaction to complete. Defaults to 0, which waits indefinitely. |
0
|
verbose |
bool
|
Whether to print verbose transaction information. Defaults to True. |
False
|
Returns:
Type | Description |
---|---|
any
|
The return value of the decorated coroutine. |
Raises:
Type | Description |
---|---|
AssertionError
|
If the instance does not have the specified attribute or if costs is less than 0. |
TimeoutError
|
If wrapped transaction takes longer than the specified timeout. |
Notes
For a timed-out transaction that does not get a chance to run due to it sitting
behind other transactions that are opportunistically processed,
a RuntimeWarning: Enable tracemalloc to get the object allocation traceback
may be seen together with the asyncio.TimeoutError
. This is because the transaction
contains the coroutine, and the transact is wrapped in an asyncio task
.
If it is unable to enter the semaphore by timeout,
the coroutine is never awaited and complains when garbage collected.
If the timeout occurs after the coroutine has acquired the semaphore,
this warning will not be seen but the asyncio.TimeoutError
will still
be thrown.
consume_credits(_func=None, *, costs, refund_in, attrname='rate_semaphore', verbose=False)
Decorator to wrap an synchronous instance-level method as an synchronous transaction within a rate-limited semaphore. The return value is the return value of the decorated method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
_func |
callable
|
The method to be wrapped. |
None
|
costs |
float
|
The number of credits required for the transaction. |
required |
refund_in |
float
|
The time in seconds after which the credits should be refunded. |
required |
attrname |
str
|
The attribute name to access the RateSemaphore belonging to the object instance. Defaults to "rate_semaphore". |
'rate_semaphore'
|
verbose |
bool
|
Whether to print verbose transaction information. Defaults to True. |
False
|
Returns:
Type | Description |
---|---|
any
|
The return value of the decorated method. |
Raises:
Type | Description |
---|---|
AssertionError
|
If the instance does not have the specified attribute or if costs is less than 0. |
wrap_in_thread(_func=None, *, costs, refund_in, attrname='rate_semaphore', daemon=False, verbose=True)
Decorator to wrap a synchronous instance-level method into a transaction, and that transaction into a thread.
The return value is a thread, that is not yet alive, and can be activated by invoking the
threading.Thread.start
method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
_func |
callable
|
The function to be wrapped. |
None
|
costs |
float
|
The number of credits required for the transaction. |
required |
refund_in |
float
|
The time in seconds after which the credits should be refunded. |
required |
attrname |
str
|
The attribute name to access the RateSemaphore belonging to the object instance. Defaults to "rate_semaphore". |
'rate_semaphore'
|
daemon |
bool
|
Whether the thread should be a daemon thread. Defaults to False. |
False
|
verbose |
bool
|
Whether to print verbose transaction information. Defaults to True. |
True
|
Returns:
Type | Description |
---|---|
Thread
|
The thread with the transaction as target function, where the transaction wraps the decorated function. Not yet alive. |
Raises:
Type | Description |
---|---|
AssertionError
|
If the instance does not have the specified attribute or if costs is less than 0. |