How to create a profiler utils decorator#
To create a new profiler utils decorator for the pydecorium.decorators.FunctionProfiler
decorator, you need to create a class that inherits from the base class pydecorium.decorators.ProfilerUtils
.
First import the class ProfilerUtils
from the module pydecorium.decorators
:
from pydecorium.decorators import ProfilerUtils
Then create a new class that inherits from the class ProfilerUtils
:
class MyProfilerUtils(ProfilerUtils):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Then you need to add the following methods and attributes:
data_name
: This attribute is a string that represents the name of the data that will be profiled.pre_execute
: This method is called before the execution of the decorated function. It arguments are the function and the arguments of the function.post_execute
: This method is called after the execution of the decorated function. It arguments are the function and the outputs of the function.handle_result
: This method is called after the execution of the decorated function and has not arguments. It should return the raw data of the profiler utils.string_value
: This method takes the raw data of the profiler utils as argument and returns a string representation of the profiler utils.
Example#
The following example shows how to create a simple profiler utils decorator that measures the runtime of a function.
This example is similar than pydecorium.decorators.Timer
decorator.
import time
class MyProfilerUtils(ProfilerUtils):
data_name = "runtime"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def pre_execute(self, func, *args, **kwargs):
self.tic = time.time()
def post_execute(self, func, outputs):
self.toc = time.time()
def handle_result(self):
return self.toc - self.tic
def string_value(self, raw_data):
return f"{raw_data:.2f} seconds"