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
- Syrpy https://github.com/jeetsukumaran/Syrupy
- Scalene https://github.com/emeryberger/scalene
- … 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.9-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50572cb7f6b137f02ac40b6ff5ffb02b1a706c8e058989f9a5d3e9c92646341b |
|
MD5 | 52e3492acd101b437c00d5ab63aab66d |
|
BLAKE2-256 | 60b19db570864a6edb1f30d16b307f263c0c6bf9368cadfe0710be2fd1265c17 |