Toolset for granular memory and cpu live profiling
Contextmanager that measures time of execution
# examples/simple_profile.py
import pyrofiler
import time
with pyrofiler.timing('Time elapsed'):
time.sleep(1)
$ python simple_profile.py
Time elapsed : 1.001563310623169
Decorators for profiling functions
# examples/simple_profile_cpu.py
import pyrofiler
@pyrofiler.cpu_util(description='Cpu usage')
@pyrofiler.timed('Time elapsed')
def sum_series(x, N):
return sum([x**i/i for i in range(1, N)])
sum_series(.3, 1000_000)
$ python simple_profile_cpu.py
Time elapsed : 0.13478374481201172
Cpu usage : 29.4
Aggregate the results in common context:
# examples/profile_with_context.py
from pyrofiler import Profiler
import time
prof = Profiler()
with prof.timing('Time 1'):
time.sleep(1)
with prof.timing('Time 2'):
time.sleep(1.5)
print('Profiling data recorded:')
print(prof.data)
$ python profile_with_context.py
Time 1 : 1.0011215209960938
Time 2 : 1.5020403861999512
Profiling data recorded:
{'Time 1': 1.0011215209960938, 'Time 2': 1.5020403861999512}
You can use other actions, for example appending results to some list in data. Check the documentation for more use cases
There are following types of objects in pyrofiler:
- Measures, which are run as a context manager
- Decorators, that are based on measures
- Profiler class that uses decorators to aggregate data
The decorators have an optional argument callback
,
to which you can pass a function that will handle the data.
The function will be passed profiling results as a first argument,
as well as any other arguments that you provided to original decorator.
Here, a custom spice
argument is provided
def print_spicy_time(time, spice):
print(f'Spice {spice} took {time} seconds')
@pyrofiler.timed(spice='spicy', callback=print_spicy_time)
def spicy_sleep():
time.sleep(10)
- Syrpy https://github.com/jeetsukumaran/Syrupy
- Scalene https://github.com/emeryberger/scalene
- ... and lots of others
Either you have a cli tool that profiles memory and cpu, but no code api for granular data
or you have stuff like decorators and no memory profiling
Having a live dashboard would help also, use https://github.com/libvis for that
- TODO
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.