Decorators for asyncio
Contents
The astopwatch decorator is used in the following way:
from aiodec import astopwatch
@astopwatch
async def blah(x, y):
return x + yWhat does it do? This simple decorator will emit logs with the following message:
INFO:aiodec:Time taken: 0.0003 seconds
Not terribly special. Yet. You can also customize the log message:
from aiodec import astopwatch
@astopwatch(message_template='Time cost was $time_ sec', fmt='%.1g')
async def blah(x, y):
return x + yThis outputs log messages with the following message:
INFO:aiodec:Time cost was 3e-4 sec
Two things: first, the template parameter used for the time cost is called
$time_; second, you can customize the formatting of the seconds value.
However, it can also do something a lot more interesting: it can include
parameters from the wrapped function in the message:
from aiodec import astopwatch
@astopwatch(message_template='x=$x y=$y | $time_ seconds')
async def blah(x, y=2):
return x + y
loop.run_until_complete(blah(1))This outputs log messages with the following message:
INFO:aiodec:x=1 y=2 | 0.0003 seconds
Magic! Note that positional args and keyword args and default values are all handled correctly.
As you saw earlier, in addition to the function parameters, the special
$time_ parameter will also be available. The other extra fields are:
$name_, which contains the__name__of the wrapped function, and$qualname_, which contains the__qualname__of the wrapped function.
These three template parameters have a trailing underscore, to avoid collisions with any parameter names.