https://github.com/grimen/python-totalrecall
A runtime step profiler - for Python.
https://github.com/grimen/python-totalrecall
context function mixin profiler python python2 python3 runtime runtime-profiler step step-profiler step-runtime-profiler timer
Last synced: 3 months ago
JSON representation
A runtime step profiler - for Python.
- Host: GitHub
- URL: https://github.com/grimen/python-totalrecall
- Owner: grimen
- License: mit
- Created: 2019-01-27T03:09:24.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-05-17T05:58:07.000Z (about 6 years ago)
- Last Synced: 2025-02-20T09:16:00.841Z (3 months ago)
- Topics: context, function, mixin, profiler, python, python2, python3, runtime, runtime-profiler, step, step-profiler, step-runtime-profiler, timer
- Language: Python
- Homepage: https://pypi.org/project/totalrecall
- Size: 20.5 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: MIT-LICENSE
Awesome Lists containing this project
README
# `totalrecall` [](https://badge.fury.io/py/totalrecall) [](https://travis-ci.com/grimen/python-totalrecall) [](https://codecov.io/gh/grimen/python-totalrecall)
*A runtime step profiler - for Python.*
## Introduction
Aggregating runtime statistics and/or finding bottlenecks in code is one of the most common challenges as a software engineer. This is a library to aid that. In comparison to most existing libraries this one is focused on **step profiling**; aggregation of runtime information in steps marked by keys/tags/labels and optional meta data, which is used to create a summary of all steps in form of a transaction. As a bonus it also supports decorating code **contexts** and **functions**.
This is an **MVP** that most likely will be extended with more profiling features.
## Install
Install using **pip**:
```sh
$ pip install totalrecall
```## Use
Very basic **[example](https://github.com/grimen/python-totalrecall/tree/master/examples/basic.py)**:
```python
import totalrecallfrom time import sleep
# ---------------------------------------------------
# EXAMPLE: runtime step profiler
# ------------------------------------------------profiler = totalrecall.timer('profile something - using timer', begin = False)
profiler.begin('task 1')
sleep(0.1)
profiler.begin('task 2')
sleep(0.2)
profiler.begin('task 3')
sleep(0.3)
profiler.end()
print('[profiler.time / basic]: TIME: {0}'.format(profiler.time))
print('[profiler.time / basic]: STEPS: {0}'.format(profiler.steps))# ---------------------------------------------------
# EXAMPLE: runtime step profiler (detailed)
# ------------------------------------------------profiler = totalrecall.timer('profile something - using timer',
begin = False,
enabled = True,
verbose = True,
colors = True,
)profiler.begin('task 1')
sleep(0.1)
profiler.begin('task 2')
sleep(0.2)
profiler.begin('task 3')
sleep(0.3)
profiler.end()
print('[profiler.time / detailed]: TIME: {0}'.format(profiler.time))
print('[profiler.time / detailed]: STEPS: {0}'.format(profiler.steps))# ---------------------------------------------------
# EXAMPLE: runtime context profiler
# ------------------------------------------------profiler = totalrecall.context('profile something 2 - using context')
with profiler:
sleep(1)print('[profiler.context / basic]: TIME: {0}'.format(profiler.time))
print('[profiler.context / basic]: STEPS: {0}'.format(profiler.steps))# ---------------------------------------------------
# EXAMPLE: runtime function profiler
# ------------------------------------------------profiler = totalrecall.function('profile something 2 - using context')
@profiler
def foo():
sleep(1)print('[profiler.function / basic]: TIME: {0}'.format(profiler.time))
print('[profiler.function / basic]: STEPS: {0}'.format(profiler.steps))```
## Test
Clone down source code:
```sh
$ make install
```Run **colorful tests**, with only native environment (dependency sandboxing up to you):
```sh
$ make test
```Run **less colorful tests**, with **multi-environment** (using **tox**):
```sh
$ make test-tox
```## About
This project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://markable.ai)** to have common code conventions between various programming environments where **Python** (research, CV, AI) is heavily used.
## Credits
Thanks to **[op-bk](https://github.com/op-bk)** for creative help with naming this library.
## License
Released under the MIT license.