Toolset for granular and live profiling
Project description
Pyrofiler
Toolset for granular memory and cpu live profiling
Quick start
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
Design
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
Callbacks
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)
Similar products
… and lots of others
Problems
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
Features
TODO
Credits
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
History
0.1.0 (2020-03-04)
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyrofiler-0.1.11-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6204be45d04ac014ddb23c08d7d78a48158fcc7b4aef8b20c68579a2ee19018f |
|
MD5 | 94f3da0ef2ad88fb3c400a9927419a0e |
|
BLAKE2b-256 | 02dfcdf7eadbcd54a5e8ff98879fd8b6d282d079150608f3d78cbe8b2a9cc40d |