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 + y
What 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 + y
This 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.